运行chromeheadlesspython警报或弹出窗口时,Selenium不加载页面

2024-06-14 13:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

(不相关的背景信息:我的笔记本电脑被偷了,我正在做这件事,这样如果再发生这种事,我有机会找回它)

问题是:

因此,我正在尝试运行一个python脚本,它将(秘密地)截图当前的地理位置,如下所示: https://gps-coordinates.org/my-location.php

它没有headless选项非常好用,但是有了它,位置就不能加载了。我的怀疑是无头模式不允许弹出窗口或警报,因此chrome无法“记住”我总是允许位置的选择。在

我已经看了源代码,位置信息出现在“传单弹出内容”类下

我所做的:

我已经尝试过使用wait-for元素

具体如下:

def waitForLoad(browser):
    try:
        WebDriverWait(browser, 10, ignored_exceptions=[
            NoSuchElementException, TimeoutException
        ]).until(EC.presence_of_element_located((By.CLASS_NAME,'leaflet-popup-content')))
    except TimeoutException:
        print("Error, timed out, trying again")
        browser.refresh()
        waitForLoad(browser)
        return

我也用firefox驱动程序(geckodriver)尝试过这个功能,但是在设置headless之前它甚至不能工作

代码:

^{pr2}$

预期的输出是一个.png文件,其中选择了当前位置,如果运行此文件,但注释掉了“--headless”行(第6行)。(同时假设该网站在允许位置方面是“白名单”)


Tags: 文件httpsbrowser脚本信息地理位置gps机会
1条回答
网友
1楼 · 发布于 2024-06-14 13:20:05

找到周围的训练

我已经想好了。事实上这和我尝试的完全不同。所以我在试验virtualdisplay,这是在selenium中无头模式出现之前的一个老解决方案。我发现我可以使用pyvirtualdisplay并将visibility设置为0代码是完全相同的,但我将它夹在以下行之间:

from pyvirtualdisplay import Display

display = Display(visible=0, size = [1000,1000])

display.start()

.

.

.

#blah blah blah, selenium code

.

.

.

display.stop()

有趣的是,我不确定无头模式和可视性设置为0的虚拟显示有什么不同,但至少它有我想要的效果

相关问题 更多 >