【问题标题】:Headless Chrome with Selenium not loading the web-page elements correctly带有 Selenium 的无头 Chrome 无法正确加载网页元素
【发布时间】:2019-07-12 05:18:57
【问题描述】:

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

我尝试通过禁用无头模式来测试代码是否正常工作。它的工作原理就像一个魅力,每次都能正确加载表格并包含完整的元素。一旦我使用无头,它就会丢失表数据。
(请注意,它仍会加载表格及其标题,它会显示“未找到结果”而不是数据元素)
我还尝试使用参数 'user=some headed 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)

结果:

-没有无头模式:
|名称 - 强制执行者 - 类型 - 有效期自 - 有效期至 |
|如果对已注册的所有人商标提出异议,可能会暂停进口货物的清关 - 农林水产省 - 禁止 - 14-01-2012 - 31-12-9999 |

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

【问题讨论】:

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


    【解决方案1】:

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

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

    这个代码 sn-p 到我的程序就可以了。

    Headless chrome 不支持所有传入语言,因此某些页面对此响应不佳。支持页面输出的语言,正确加载页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-29
      • 2018-04-18
      • 2020-06-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多