【发布时间】:2018-04-29 05:35:39
【问题描述】:
我有一个正在访问打印机的脚本,当 chrome 正常运行时,我的代码完全可以正常运行,但是当它无头运行时,selenium 似乎无法在网页上找到元素。
以下是相关代码:
初始化方法:
def __init__(self, ip_address):
""" Initialize a new Printer_Webpage object."""
self.ip_address = ip_address
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920x1080")
self.browser = webdriver.Chrome(chrome_options=chrome_options)
# Ignore lack of cert for each printer web page.
# Otherwise, can't open page.
self.browser.accept_untrusted_certs = True
登录方式:
def login(self):
"""Navigates through the login page for the printer."""
# Open login page
self.browser.get(f'https://{self.ip_address}/wcd/top.xml')
# STEPS TO LOGIN:
# 1) Select 'Administrator' radio button and click.
self.browser.find_element_by_id('Admin').click()
# 2) Select Login button and click.
self.browser.find_element_by_xpath("//input[@type='submit' \
and @value='Login']").click()
# 3) Select admin (user mode)
self.browser.find_element_by_id('R_ADM2').click()
# 4) Select password field and input PASSWORD, then submit.
password_field = self.browser.find_element_by_id('Admin_Pass')
password_field.send_keys(PASSWORD)
password_field.send_keys(Keys.RETURN)
完整的错误信息:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"Admin"}
还有一些其他可能有用的信息:
(Session info: headless chrome=62.0.3202.94)
(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.14393 x86_64)
【问题讨论】:
-
让无头浏览器截屏。这可能是先滚动到元素的问题,或者您可能需要在初始化无头浏览器时调整它的大小 - 如果它不够大,则该网站的大小可能适合移动设备并且在该视图中没有管理链接。
-
窗口大小使用逗号:
--window-size=1920,1080。截取屏幕截图或从页面中转储 HTML 以找出该元素不存在的原因。 -
好的,我发现网页没有正确加载,最后只显示一个空白页。正常加载时,页面有几秒钟是白色的,所以我尝试使用 time.sleep(30) 给它足够的时间来加载,它仍然显示为白色页面。
-
Chrome-headless 不适用于无效的 https 证书。你只会得到一个空白页!见bugs.chromium.org/p/chromium/issues/detail?id=721739
-
谢谢!是否没有解决此问题的方法,还是我必须切换到其他无头浏览器?
标签: python google-chrome selenium selenium-chromedriver google-chrome-headless