我已经使用Selenium和最初的PhantomJS开发了一些Python脚本。在走向自动下载时,我改用了(带头的)Firefox(运行了),然后选择了无头选项的Chrome,这样我就不会打开浏览器了。
我的第一个脚本访问一个页面和几个HTML元素,与无头Chrome完美搭配。
但是第二个 仅适用于带头的Chrome 。如果添加“无头”选项,它将不再起作用。当我尝试以无头模式打印HTML以查看为什么找不到所需的HTML元素时,我所拥有的只是:
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
使用Chrome浏览器,我可以打印完整的HTML。这就是我启动无头Chrome的方式:
options = webdriver.ChromeOptions() options.add_argument("--ignore-certificate-errors") options.add_argument("headless") driver = webdriver.Chrome(chrome_options=options)
再次注意,这在我的另一个脚本中有效。唯一的区别是我需要登录才能访问该页面,但是即使那样,为什么它也可以与头部配合使用?通过填写表格,我的脚本可以自动登录。
Python:3.6.1,Chrome:60.0.3112.78(64位),Selenium:3.4.3
任何想法?谢谢。
编辑:这是代码的开头
url = 'https://10.11.227.21/tmui/' driver.get(url + "login.jsp") html_source = driver.page_source print(html_source) blocStatus = WebDriverWait(driver, TIMEOUT).until(EC.presence_of_element_located((By.ID, "username"))) inputElement = driver.find_element_by_id("username") inputElement.send_keys('actualLogin') inputElement = driver.find_element_by_id("passwd") inputElement.send_keys('actualPassword') inputElement.submit()
我有和您一样的经历,并通过使用xvfb和pyvirtualdisplay解决了这一问题。
我使用chromedrive = v2.3.1,chrome-browser = v60和Selenium = 3.4.3
在无头Chrome中,某些脚本似乎无法按预期工作。
请参阅https://gist.github.com/addyosmani/5336747中的 vpassapera评论。
像下面这样尝试,
from pyvirtualdisplay import Display display = Display(visible=0, size=(800, 600)) display.start() # Do Not use headless chrome option # options.add_argument('headless') url = 'https://10.11.227.21/tmui/' driver.get(url + "login.jsp") html_source = driver.page_source print(html_source) blocStatus = WebDriverWait(driver, TIMEOUT).until(EC.presence_of_element_located((By.ID, "username"))) inputElement = driver.find_element_by_id("username") inputElement.send_keys('actualLogin') inputElement = driver.find_element_by_id("passwd") inputElement.send_keys('actualPassword') inputElement.submit() display.stop()
xvfb必须使用“ pyvortualdisplay”
$ sudo apt-get install -y xvfb