(无关的背景信息:我的笔记本电脑被盗了,我正在这样做,所以如果再次发生,我将有很大的机会恢复它)
问题:
因此,我正在尝试运行一个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行)。 (同时假设该网站在允许位置方面被“列入白名单”)
答案 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的虚拟显示有何不同,但至少它具有我想要的效果