Python Selenium 自动化的笔记

这篇具有很好参考价值的文章主要介绍了Python Selenium 自动化的笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.常用的一些第三方库

import socket
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import random
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.action_chains import ActionChains
# from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import uiautomation as auto
# import pyperclip
import traceback
from selenium.webdriver.common.keys import Keys
from datetime import datetime
from dateutil.relativedelta import relativedelta
import os
import requests
import csv

2.URL小陷阱

        大部分URL都是https开头,但是遇到http开头的URL的时候,浏览器很可能会把http自动识别成https,导致无法进入正确的URL。使用driver.get()就会经常遇到这种情况,遇到这种情况我使用的方式是让uiautomation输入一遍完整的URL,避免浏览器或者driver.get()函数自动补全http为https。

3.自动化测试浏览器的初始化

port = 49152
my_driver_path = r"G:\Py\spider\venv\Scripts\chromedriver.exe"
# my_driver_path = r"E:\Python\AutoUI\venv\Scripts\chromedriver.exe"
# 获取当前脚本的绝对路径
script_path = os.path.abspath(__file__)
# 获取当前脚本的全名(包括路径和扩展名)
script_fullname = os.path.basename(script_path)
download_path = script_path.replace(f"{script_fullname}", "AutomationProfile")
web_tittle = "88888888"
target_url = '88888888'
if is_port_in_use(port):
    print(f"Port {port} is in use")
else:
    print(f"Port {port} is available")
    # 设置Chrome选项,以启用远程调试并指定一个端口
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option("detach", True)
    chrome_options.add_argument('--disable-web-security')
    chrome_options.add_argument('--allow-running-insecure-content')
    chrome_options.add_argument("--ignore-certificate-errors")
    chrome_options.add_argument(f"--remote-debugging-port={port}")
    chrome_options.add_argument("--disable-infobars")
    prefs = {
        "download.default_directory": f"{download_path}",
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing.enabled": False
    }
    chrome_options.add_experimental_option("prefs", prefs)
    # 创建webdriver服务实例,指定chromedriver的路径
    service = Service(executable_path=my_driver_path)
    # 创建webdriver实例,并传入定义的选项
    driver = webdriver.Chrome(service=service, options=chrome_options)
    # 设置页面加载超时时间
    driver.set_page_load_timeout(10)
    ac = ActionChains(driver)

        显然我这里用的是谷歌浏览器,指定了浏览器驱动的位置,指定了自动化测试浏览器使用的端口,指定端口的好处就是可以让其他脚本来接管同一个自动化测试浏览器,指定了谷歌浏览器文件下载的位置,同时把谷歌浏览器的detach设置为True,意思是这个脚本创建启动了一个自动化测试的浏览器实例之后与该浏览器分离,这样在脚本运行结束之后,浏览器就不会被关闭了,可以一直存在,直到自己手动去关闭这个浏览器。

        我还给浏览器设置了一些可能有用的设置,有一部分可能是不生效的,但是不影响。

        我常用的用于更新谷歌浏览器驱动的网址是这个: ChromeDriver - WebDriver for Chrome

这个网址提供的谷歌浏览器驱动非常全面了。

4.找不到元素的问题

        可能是iframe

        如果死活找不到某个元素,那么很可能是某个元素位于某个iframe中,或者某个ifram的嵌套的嵌套的嵌套的iframe中。这种情况使用 driver.switch_to.frame(target_elements) 即可。

def switch_frame_id(id):
    target_elements = find_elements_id(id)
    driver.switch_to.frame(target_elements)

        不一定是通过ID,也可以是通过CLASS等其他特征

        可能是标签页没切换对、遇到空白页的干扰、遇到开发者控制台的干扰等

        那么你就可以把空白页先关闭,同时切换到指定名称的标签页

def close_about_blank():
    global driver
    window_handles = driver.window_handles
    # print(driver.title)
    # 获取当前所有打开的窗口的句柄
    # print(window_handles)
    for handle in window_handles:
        driver.switch_to.window(handle)
        # print(driver.title)
        if driver.title == "":
            driver.close()
            continue


def get_target_title():
    global driver
    window_handles = driver.window_handles
    # print(driver.title)
    # 获取当前所有打开的窗口的句柄
    # print(window_handles)
    for handle in window_handles:
        driver.switch_to.window(handle)
        # print(driver.title)
        if driver.title == web_tittle:
            break
    # print(driver.title)

        值得注意的是,页面发生过跳转之后,先前有效的tag立刻失效

        如果害怕这个问题造成的困扰,你可以在每次使用这个tag之前重新再获取一次这个tag

        获取tag的时候,最保险的是使用find_elements,这样的话不管能不能找到该tag,它都会返回一个列表,即使这个列表是空的,也不会爆红,如果是find_element遇到找不到该元素的情况,就会立马爆红,程序提前终止(如果没有捕获错误的相应措施的话)。

5.接管已经存在的自动化测试浏览器实例

        我们在启动浏览器的时候,指定了一个端口号,那么接管那个自动化测试浏览器的时候,用回那个端口号就可以了

def down_file(
              accept_date_start,
              accept_date_end):
    # 设置Chrome选项,以连接到远程调试端口
    global chrome_options
    global service
    global driver
    global ac
    global start_date
    global end_date
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option(f"debuggerAddress", f"127.0.0.1:{port}")
    # 创建webdriver服务实例,指定chromedriver的路径
    service = Service(executable_path=my_driver_path)
    # 创建webdriver实例,并传入定义的选项,这将接管现有的浏览器实例
    driver = webdriver.Chrome(service=service, options=chrome_options)
    # 设置页面加载超时时间
    driver.set_page_load_timeout(3)
    # driver = webdriver.Chrome(options=chrome_options)
    ac = ActionChains(driver)

6.延长一些步骤的待机时长

        不要觉得30秒才下载一个文件好像很慢,在你不使用IP代理池的时候,如果同一个IP在半小内或者一小时内下载的内容量过大时,服务器会送你一个502 Bad Gateway。又或者导致服务器限制你的流量或者把你拉黑。

        一般来说,慢就是快,越快就是越慢,越慢就是越快。

        熟练使用IP代理池当我没说,hhh

以上这些方法基本够用。文章来源地址https://www.toymoban.com/news/detail-764648.html

到了这里,关于Python Selenium 自动化的笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python爬虫(七)--------selenium自动化

    查找方法(python3.7之前版本) find_element_by_id 根据id属性来定位 find_element_by_name 根据name元素来定位 find_element_by_xpath 根据xpath语法来定位 find_element_by_tag_name 根据标签名来定位 find_element_by_class_name 根据class的名字来定位 find_element_by_css_selector 根据css选择器来定位 以下两种方法都

    2024年01月16日
    浏览(52)
  • python selenium 自动化登录页面

    2024年02月10日
    浏览(39)
  • Python + selenium 自动化测试框架

    项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息的代码;截图的代码的,定位元素的代码等等 2.功能层(页面层) 功

    2023年04月13日
    浏览(32)
  • python+selenium自动化测试环境搭建步骤(selenium环境搭建)

     📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢交流讨论:欢迎加入我们一起学习! 📢资源分享:耗时200+小时精选的「软件测试」资料包 📢 软件测试学习教程推荐:火遍全网的《软件测试》教程 ​ 1.自动化测试概念:       是

    2024年01月22日
    浏览(33)
  • 【自动化测试】基于Selenium + Python的web自动化框架

    Selenium是一个基于浏览器的自动化工具,她提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid:  1、Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,p

    2024年02月07日
    浏览(49)
  • Python自动化测试【selenium面试题】

    一、selenium中如何判断元素是否存在? expected_conditions模块提供了16种判断方法,以下方法是判断元素存在DOM中: presence_of_element_located \\\"\\\"\\\" An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible. 判断元素存在DOM中,存在并不代表

    2024年01月20日
    浏览(51)
  • python 自动化测试之Selenium 模块

    官网:https://www.selenium.dev/zh-cn/ 一、安装 二、声明浏览器 三、配置项 常用配置参数 其他配置项 四、常用方法 五、常用属性 switch_to属性 六、操作元素 定位元素 方法和属性 操作下拉框元素 七、模拟鼠标操作 八、键盘操作 八、延时等待 强制等待 隐式等待 显式等待 十、其

    2024年02月13日
    浏览(35)
  • 【python应用】之selenium做自动化

    提示:本篇基于selenium做的一个的脚本,由于我的技术比较有限,所以比较适合初学者学习: 大家好,我是一名大二的学生,由于暑假学习了python,只学python这些语法是非常枯燥的,学习python的一些库才能做出一些有趣的项目,所以就在b站上学习爬虫,学习的过程中发现se

    2024年01月25日
    浏览(32)
  • Python + selenium 自动化测试框架详解

    项目自动化测试框架设计为4层 1.基础层(通用层) 基础层: 将通用,重复性比较高的代码封装到这里。 写通用的代码的。 其他3层想要的话,就可以直接调用。 例如: 读取测试数据的代码,读取配置信息的代码;截图的代码的,定位元素的代码等等 2.功能层(页面层) 功

    2024年02月03日
    浏览(30)
  • Python+Selenium自动化测试详细教程

       Python Selenium是Selenium WebDriver的Python语言封装,为Python开发者提供了一个方便易用的自动化测试库。它支持多种浏览器(如Chrome、Firefox、Edge等)以及多个操作系统,可以模拟用户在浏览器中的各种行为,包括打开网页、查找元素、输入文本、点击链接、提交表单、上传文

    2023年04月18日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包