如果我必须直接单击横幅并在另一个选项卡上打开它,如何使用 selenium 获得重定向链?

Posted

技术标签:

【中文标题】如果我必须直接单击横幅并在另一个选项卡上打开它,如何使用 selenium 获得重定向链?【英文标题】:How to get redirect chain with selenium if I must directly click on banners and open it on another tab? 【发布时间】:2021-07-12 18:44:04 【问题描述】:

我正在做一个项目,我应该在其中点击横幅并获得重定向链。

为了不让我的页面覆盖并使下一步更容易,我认为我应该在横幅上ctrl+click 并使其在另一个浏览器选项卡中打开以获取 all >真正的重定向链。

我研究了很多,但只发现目前的方法会转储 HAR 文件以获取重定向链。但要获取 HAR 文件,开发者工具窗口中的网络面板应该事先在标签中打开。但是,就我而言,新标签在加载标签之前无法打开网络面板;我也无法打开 网络面板 并重新加载页面,因为重定向链不是真实的。此外,嵌入的性能日志不适用于我的情况

谁能告诉我如何解决这些问题?或者我对上面的任何部分都错了?任何建议都将不胜感激,因为我真的一直在努力。

【问题讨论】:

这听起来可以用selenium-wire或browsermob解决 现在在 selenium-wire 上工作。 Browsermob 可以下载 HAR 文件,暂时不知道要不要先打开 Network 面板。 selenium-wire 似乎没问题,现在正在研究它的速度。此外,如何筛选出真正的直接路径仍然是一个问题。顺便说一句,在 selenium-wire 中,您可以启动一个未被检测到的铬,它可以通过机器人检测。 关于 Browsermob 我认为你不需要打开网络面板...关于 selenium-wire,我认为这是一个很棒的包!优点之一是与 undetected-chrome 协作。 但似乎未检测到的铬与click 方法不兼容。请参阅undetected-chormedriver 中的重要说明 【参考方案1】:

为了获得重定向链,您需要 HAR 文件。

有一些包将 selenium 与其他库结合来实现这一点(以及其他添加)。

一个是browsermob-proxy。

BrowserMob 代理允许您操纵 HTTP 请求和响应、捕获 HTTP 内容以及将性能数据导出为 HAR 文件。 BMP 作为独立的代理服务器运行良好,但在嵌入 Selenium 测试时尤其有用。

这是一个例子:

from browsermobproxy import Server
server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

from selenium import webdriver

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server=0".format(proxy.proxy)) #Configure chrome options
driver = webdriver.Chrome(chrome_options=chrome_options)
proxy.new_har("***") 
driver.get("https://***.com")
print(proxy.har)

还有其他库,例如 selenium-wire,具有类似的功能(也具有其他功能)。

注意:无需打开网络面板。

确保download the proxy 并添加启动服务器的路径。

【讨论】:

以上是关于如果我必须直接单击横幅并在另一个选项卡上打开它,如何使用 selenium 获得重定向链?的主要内容,如果未能解决你的问题,请参考以下文章

仅当我在新选项卡上打开时才会打开 KnockoutJs 链接

在 chrome IOS 选项卡上打开 base64 pdf

找不到ID为'xxx'的UpdatePanel。如果它是动态更新的,那么它必须在另一个UpdatePanel内

从相机捕获图像并在活动中显示

从相机捕获图像并在活动中显示

使用新选项卡单击打开图像