硒无头时页面无法加载-python-警报或弹出错误

时间:2019-06-01 00:35:47

标签: python selenium

(无关的背景信息:我的笔记本电脑被盗了,我正在这样做,所以如果再次发生,我将有很大的机会恢复它)

问题:

因此,我正在尝试运行一个Python脚本,该脚本将(秘密地)按照此网站截图当前地理位置: https://gps-coordinates.org/my-location.php

如果没有无头选项,则效果很好,但是有了它,该位置就不会加载。我怀疑无头模式无法正确显示弹出窗口或警报,因此Chrome无法“记住”我的选择以始终允许位置。

我已经查看了源代码,并且位置信息出现在“ leaflet-popup-content”类下

我尝试过的事情:

我已经尝试过使用等待元素存在

如下:

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)进行了尝试,但是在设置无头之前甚至无法正常工作

代码:

import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-infobars")
browser=webdriver.Chrome('/home/tclack/bin/chromedriver',chrome_options=chrome_options)
# YMMV this is the chromedriver I use and the location

url = "https://gps-coordinates.org/my-location.php"

browser.get(url)

browser.save_screenshot('screenshot.png')
browser.close()
browser.quit()

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

1 个答案:

答案 0 :(得分:0)

发现周围锻炼

我已经弄明白了。实际上,这是与我尝试的完全不同的角度。因此,我正在尝试虚拟显示,这是硒中无头模式出现之前的一种旧解决方案。我发现我可以使用pyvirtualdisplay并将可见性设置为0,代码是完全相同的,但是我将它们夹在以下几行之间:

from pyvirtualdisplay import Display

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

display.start()

.

.

.

#blah blah blah, selenium code

.

.

.

display.stop()

有趣的东西,我不知道无头模式和可见性设置为0的虚拟显示有何不同,但至少它具有我想要的效果