(无关紧要的背景信息:我的笔记本电脑被偷了,我做这个是为了如果它再次发生,我有很好的机会找回它)
问题是:
所以我正在尝试运行一个python脚本,它会(秘密地)根据这个网站截图当前的地理位置:https://gps-coordinates.org/my-location.php
它在没有headless选项的情况下工作得很好,但有了它,位置就无法加载。我怀疑无头模式不允许弹出窗口或提示,因此chrome不能“记住”我的选择,总是允许定位。
我已经查看了源代码,位置信息出现在"leaflet-popup-content“类下面
我尝试过的:
我已经尝试使用当前的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之前它甚至无法工作
代码:
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行),您会看到这一点。(还假设该网站在允许位置方面是“白名单”)
发布于 2019-06-27 07:37:01
发现周围的锻炼
我想通了一些事。实际上,这与我尝试的角度完全不同。因此,我在尝试使用virtualdisplay,这是selenium中出现无头模式之前的一个旧解决方案。我发现我可以使用pyvirtualdisplay并将可见性设置为0,代码是完全相同的,但我将其夹在以下代码行之间:
from pyvirtualdisplay import Display
display = Display(visible=0, size = [1000,1000])
display.start()
.
.
.
#blah blah blah, selenium code
.
.
.
display.stop()
有趣的是,我不确定无头模式和可见性设置为0的虚拟显示有什么不同,但至少它有我想要的效果
https://stackoverflow.com/questions/56403024
复制相似问题