Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等

这篇具有很好参考价值的文章主要介绍了Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等,🎃🎃妙用Selenium,selenium,自动化,测试工具

解决 Selenium 自动化中的常见疑难杂症

这里记录一些关于 Selenium的常用操作和疑难杂症。

有一些细节的知识点就不重复介绍了,因为之前的文章中都有!

如果对本文中的知识点有疑问的,可以先阅读我以前分享的文章!

知识点📖📖

模块 链接 作用
selenium https://www.selenium.dev/zh-cn/documentation/ 支持 web 浏览器自动化的一系列工具和库的综合项目

如果有看不懂的地方,可以结合我以前的文章一起看。

  • 【Selenium】控制当前已经打开的 chrome浏览器窗口

  • 【Selenium】控制当前已经打开的 chrome浏览器窗口(高级版)

  • Python模块psutil:系统进程管理与Selenium效率提升的完美结合

  • Selenium性能优化:一文带你快速上手!

TodoList:

  • 使用crx扩展插件进行代理修改(后续更新

初始化webdriver

  • ChromeService 是一个Service类,负责启动和停止 chromedriver。这个进程是运行自动化脚本的基础。

  • webdriver-manager 可以自动下载和管理 WebDriver 二进制文件,用于自动管理 webdriver驱动

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager


def init_driver(options=None) -> webdriver.Chrome:
    """
    初始化浏览器驱动.

    Args:
        options(Options): chrome配置选项

    Returns:
        driver(WebDriver): 浏览器驱动对象

    """
    return webdriver.Chrome(
        service=ChromeService(ChromeDriverManager().install()),
        options=options
    )

使用代理

  • 使用crx扩展插件进行代理修改(后续更新
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


if __name__ == '__main__':
    options = Options()
    proxy = "http://127.0.0.1:9527"
    options.add_argument(f'--proxy-server={proxy}')
    driver = init_driver(options=options)
    driver.get('https://www.bilibili.com/')

运行结果如下:

  • 可以请下的看到,所有请求的Remote Address 都是 127.0.0.1:7890

Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等,🎃🎃妙用Selenium,selenium,自动化,测试工具

指定 Chrome 浏览器端口

启动浏览器

代码贴心的给出多项selenium 优化选项,根据需要来选择~

import subprocess


def start_chrome(browser_path, commands_list=None) -> None:
    """
    启动浏览器。

    Args:
        browser_path(str): 浏览器安装的路径
        commands_list(List[str]): 启动浏览器的命令行参数,默认为None

    Returns:
        None
    """
    commands = [browser_path]
    commands.extend(commands_list)
    # 启动浏览器
    subprocess.Popen(commands)


if __name__ == '__main__':
    # 设置浏览器的路径和启动参数
    path = r"C:\Program Files\Google\Chrome\Application\chrome.exe"
    port = 9527
    cmd_map = {
        '指定浏览器配置': r'--user-data-dir=F:\selenium',
        '指定远程调试端口': '--remote-debugging-port={}'.format(port),
        # '无头模式': '--headless',
        # '无沙盒模式': '--no-sandbox',
        # '指定页面加载策略': '--no-sandbox',
        # '禁用弹出拦': '--disable-popup-blocking',
        # '禁用图片加载': '--blink-settings=imagesEnabled=false',
        # '禁用GPU硬件加速': '--disable-gpu',
        # '禁用js': True,
    }
    start_chrome(path, list(cmd_map.values()))

连接浏览器

注意!这里Selenium WebDriver 将附加到一个已经运行的 Chrome 实例上,而不是启动一个新的浏览器实例。这意味着 WebDriver 将使用现有浏览器实例的设置,包括网络和代理配置。即无法使用上处的方法进行指定代理。

具体步骤如下:

  1. 导入 Selenium 相关模块。
  2. 创建 Chrome 浏览器的选项(Options)对象,并将调试端口设置为 “127.0.0.1:9527”,这意味着浏览器将连接到 Chrome 浏览器的开发者工具(DevTools)端口,以便进行远程调试。
  3. 初始化 Chrome WebDriver,将上述选项传递给 WebDriver。
  4. 打开 Chrome 浏览器,并连接到指定的调试端口。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


if __name__ == '__main__':
    options = Options()
    options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
    driver = webdriver.Chrome(options=options)

    url = 'https://www.bilibili.com'
    driver.get(url)
    print(driver.title)	# 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

无法连接指定端口 Chrome浏览器

在命令行中启动 Chrome 浏览器时候,不要使用 --headless !!!会导致Selenium 无法连接。

问题复现

一般的,我们使用以下命令去指定chrome浏览器端口,--headless 可能是有意或无意添加的

[
	"--remote-debugging-port=9527",
	"--headless"
]

# 或者 命令行
chrome.exe --remote-debugging-port=9527 --user-data-dir="F:\selenium\AutomationProfile" --headless

这个时候,会发现,没有打开任何窗口。因为是无头模式!!!

在命令行执行 netstat -ano | findstr :9527,如下图所示:
Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等,🎃🎃妙用Selenium,selenium,自动化,测试工具

现在你去访问:http://127.0.0.1:9527/json/version,可以看到下图所示:

  • 这表明远程调试接口是开启的

Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等,🎃🎃妙用Selenium,selenium,自动化,测试工具


但如果我们使用以下代码去连接端口为 9527 的浏览器,则会报错!!!

options.add_experimental_option("debuggerAddress", "127.0.0.1:9527")
driver = webdriver.Chrome(options=options)

如果没有意外!则会抛出以下异常:

selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:9527
from unknown error: unable to discover open pages

这个问题其实是不应该发生的!!!

因为 无头模式 可能改变了与调试接口的交互方式或者其他相关配置,从而影响到了 Selenium 的连接。


如何解决

杀死全部的9527端口的进程,并注意在命令行中启动 Chrome 浏览器时候,不要使用 --headless

这个命令的目的是终止在指定端口上运行的进程,以便释放端口并停止与之相关的应用程序。请注意,使用 taskkill 命令会强制终止进程,因此要小心使用,以免意外终止重要的进程。

这个时候,我们需要在命令行执行以下命令,作用是终止在端口 9527 上运行的进程。(详细解释看下面)

  1. netstat -ano | findstr :9527:这部分命令用于查找在端口 9527 上运行的进程的 PID。netstat 列出了所有网络连接,而 findstr :9527 过滤出包含端口 9527 的行,显示它们的 PID。

  2. for /f "tokens=5" %a in (...) do ...for 命令用于处理上述命令的输出。它将提取 netstat 输出中的 PID,并将其存储在 %a 变量中。

  3. taskkill /F /PID %a:一旦 PID 被提取并存储在 %a 中,taskkill 命令将使用这个 PID 终止相关进程。

for /f "tokens=5" %a in ('netstat -ano ^| findstr :9527') do taskkill /F /PID %a

kill PID

for /f "tokens=5" %a in ('netstat -ano ^| findstr :9527') do taskkill /F /PID %a

这段命令是一个用于在 Windows 命令提示符中终止在特定端口(9527)上运行的进程的复合命令。下面是这个命令的解释:

  1. for /f "tokens=5" %a in ('netstat -ano ^| findstr :9527') do ...:这部分命令使用 for 循环来处理输出结果。它的作用是执行以下操作:

    • for /f:这表示使用 for 命令来进行循环迭代。
    • "tokens=5":这指定了循环要提取的令牌(token),在这里我们提取第五个令牌。在这个上下文中,第五个令牌是 netstat 输出中的进程标识符(PID)。
    • %a:这是一个变量,用于存储从 netstat 命令输出中提取的 PID。
  2. ('netstat -ano ^| findstr :9527'):这部分是在 for 命令内部的命令,它会产生一系列数字,这些数字代表在端口 9527 上运行的进程的 PID。它的工作步骤如下:

    • netstat -ano:这部分执行 netstat 命令,用于列出所有活动网络连接及其相关信息。-ano 标志告诉 netstat 显示所有连接的详细信息,并显示每个连接的 PID。
    • ^|:这是一个管道符号 |,用于将 netstat 的输出传递给下一个命令,即 findstr
    • findstr :9527:这部分命令用于过滤 netstat 输出,只保留包含端口号 9527 的行,这些行包括了我们关心的进程信息。
  3. taskkill /F /PID %a:一旦 for 循环提取了 netstat 输出中的 PID(存储在 %a 中),这部分命令使用 taskkill 命令来终止这些进程。具体地:

    • taskkill:这是用于终止进程的命令。
    • /F:这是 taskkill 的标志,表示要强制终止进程,即无需用户确认。
    • /PID %a:这是指定要终止的进程的 PID,其中 %a 包含了在 for 循环中提取的 PID。

因此,整个命令的作用是找到所有在端口 9527 上运行的进程的 PID,然后使用 taskkill 命令将它们终止掉。这可以帮助我们清除特定端口上的活动进程。需要注意使用此命令,以免终止不必要的进程。

未完待续

将持续更新,常见的Selenium的操作 和 疑难杂症等!文章来源地址https://www.toymoban.com/news/detail-767090.html

到了这里,关于Selenium 自动化高级操作与解决疑难杂症,如无法连接、使用代理等的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数十位高级测工联合讲解Selenium自动化测试框架工作原理

    一、Selenium是什么? 用官网的一句话来讲:Selenium automates browsers. That\\\'s it!简单来讲,Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作浏览器一样。支持的浏览器包括IE,Firefox,Safari,Chrome等。Selenium 不仅仅是一个工具或

    2024年02月05日
    浏览(28)
  • Selenium 自动化操作

    嘿,小伙伴们周末有没有像  大猪  一样在加班的,今天分享一个超有意思的东西 Selenium 自动化测试/调式工具。 Selenium 就像真实用户所做的一样,Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖那么多的平台。

    2024年02月19日
    浏览(28)
  • Web 自动化神器 TestCafe—页面高级操作篇

    在【Web 自动化神器 TestCafe — 页面基本操作篇】这篇文章中我们介绍了TestCafe页面交互的一些基本使用 Web 自动化神器 TestCafe — 页面基本操作篇 这篇文章接着上一篇来给大家介绍一下 TestCafe 页面交互的一些高级操作。 一、鼠标拖拽   鼠标拖拽鼠标拖拽 1、拖拽元素偏移 方法

    2024年02月11日
    浏览(27)
  • selenium自动化测试-鼠标键盘操作

    前面我们已经学完了8种定位方式和利用Firefox插件协助定位,学会了定位了,自动化就成功了一半。 但是我们好像只是定位,定位后的操作并不多,我们今天要系统的了解下鼠标键盘操作。 回顾下我们之前的简单操作: 1.click() 点击按钮 2.clear() 清除输入框 3.send_keys() 输入字

    2024年02月07日
    浏览(40)
  • 【Selenium自动化测试】操作Cookie

    所谓\\\"cookie\\\"数据是指某些网站为了辨别用户身份,储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。通俗来讲就是指缓存数据,包括用户名、密码、注册账户、手机号等公民个人信息。 在Web自动化测试时,我们也经常需要对其进行

    2024年02月03日
    浏览(67)
  • 如何使用 Selenium 实现自动化操作?

    本篇咱们来谈谈Selenium自动化脚本是如何工作的,以及如何实现一个简单的自动化示例; 一、关于Selenium 1.1、为什么选择它作为web自动化的测试工具? 选择Selenium作为web自动化测试工具的原因(面试也许会问): 1. 开源免费; 2. 支持多浏览器,如Chrome、 Firefox、IE浏览器等;

    2024年02月02日
    浏览(29)
  • 多测师肖sir_高级金牌讲师___ui自动化之selenium001

    一、认识selenium (1)selenium是什么? a、selenium是python中的一个第三方库 b、Selenium是一个应用于web应用程序的测试工具,支持多平台,多浏览器,多语言去实现ui自动化测试,我们现在讲的Selenium版本其实是Selenium2版本 c、Selenium测试直接运行在浏览器中,就像真正的用户在操作

    2024年02月08日
    浏览(27)
  • 分享几个 Selenium 自动化常用操作

    最近工作会用到 selenium 来自动化操作一些重复的工作,那么在用selenium写代码的过程中,又顺手整理了一些常用的操作,分享给大家。 常用元素定位方法 虽然有关selenium定位元素的方法有很多种,但是对于没有深入学习,尤其是没有前端知识的朋友来说,常用的就那几招。

    2024年04月10日
    浏览(28)
  • Web自动化之Selenium-鼠标操作

    本文总结了Selenium常用的鼠标操作。  打开百度网站,点击首页的新闻。 WebDriver封装了一套鼠标操作的包, ●引入包:from selenium.webdriver.common.action_chains import ActionChains。 ●定位元素,存储到某个变量:ele = driver.find_element_by_×××(\\\'××\\\')。 ●固定写法:ActionChains(driver).click(e

    2024年02月11日
    浏览(33)
  • Web自动化之Selenium常用操作

    本文总结使用selenium进行web/UI自动化时,会用到的一些常用操作。 是元素定位另外一种方式,跟上面的8种底层一样。 在定义driver的时候设置chrome_options参数,该参数是一个Options类所实例化的对象。其中,常用的参数是设置浏览器是否可视化和浏览器的请求头等信息,前者可

    2024年02月02日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包