带有Selenium的无头Chrome无法正确加载网页元素

时间:2019-07-12 05:18:57

标签: google-chrome selenium-webdriver selenium-chromedriver google-chrome-headless web-testing

我正在使用一个Selenium WebDriver和Python加载一个网站进行爬网。
我必须从中加载一个表,当不使用 headless = True 时,该表工作得很好。
表本身实际加载,但在这种情况下显示“未找到结果”,否则获取数据元素。

我尝试通过禁用无头模式来测试代码是否正常运行。它的工作原理就像一种魅力,每次都正确地使用完整的元素加载表。一旦我使用headless,它将丢失表数据。
(请记住,它仍然会加载表及其标题,它显示“未找到结果”而不是数据元素)
我还尝试用参数'user = 某团长用户'伪造团长用户
我也尝试过启用/禁用大量chrome选项,例如
disable gpu;从最大化屏幕开始;更改屏幕尺寸;绕过代理
以及通常用于调试无头chrome选项的所有其他内容。

以下是代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

service = webdriver.chrome.service.Service(r'C:/Program Files (x86)/SeleniumWrapper/chromedriver.exe')
service.start()
chrome_options = Options()

chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
chrome_options.add_argument("--disable-gpu")
chrome_options.headless = True

driver = webdriver.Remote(service.service_url, desired_capabilities=chrome_options.to_capabilities())

driver.get('https://cambodiantr.gov.kh/index.php?r=searchMeasures/index')

table = driver.find_element_by_xpath('//*[@id="measures-grid"]/table')
all_rows = table.find_elements_by_tag_name('tr')
print(all_rows[0].text)
print(all_rows[1].text)

结果:

-无头模式:
|名称-强制执行者-类型-有效期自-有效期至|
|如果对注册拥有人的商标有异议,则可以暂停进口货物的清关-农业,林业和渔业部-禁止-2012年1月14日-31-12-9999 |

-使用无头模式:
|名称-强制执行者-类型-有效期自-有效期至|
|未找到结果。 |

1 个答案:

答案 0 :(得分:0)

在更多研究中,我发现添加了

chrome_options.add_argument('--lang=en_US') 

我程序的这段代码片段可以解决问题。

无头Chrome并不支持所有传入的语言,因此某些页面对此反应不佳。支持页面输出所使用的语言,可以正确加载页面。