Selenium Chrome获取文本在无头模式下不起作用

时间:2019-02-01 19:47:16

标签: python selenium selenium-chromedriver

当使用Chrome Webdriver在无头模式下运行硒时,我遇到硒的奇怪行为。到目前为止,在将文本设置为无头模式之前,我还没有遇到这个问题,它一直有效。

下面给出了可重现的示例:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.ChromeOptions()
#options.add_argument('--headless')
#options.add_argument('--no-sandbox')

driver = webdriver.Chrome(chrome_options=options)

driver.get("https://www.zoom.com.br/ar-condicionado/todos")

wait = WebDriverWait(driver, 10)

stores = wait.until(
    EC.presence_of_all_elements_located((By.XPATH,
                                        './/span[@class="storeCount-txt"]')))

print(stores[0].text)

运行此代码时,输​​出为:

> em 14 lojas

但是,当我在无头模式下运行(删除#s)时,输出为空:

> ""

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试一下。这应该可行。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument("--start-maximized")

driver = webdriver.Chrome(chrome_options=options,executable_path='D:/Java/TestChrome/lib/chromedriver.exe')

driver.get("https://www.zoom.com.br/ar-condicionado/todos")
wait = WebDriverWait(driver, 20)

stores = wait.until(EC.presence_of_all_elements_located((By.XPATH,'//span[@class="storeCount-txt"]')))
print("test : " + stores[0].get_attribute('innerHTML'))

让我知道是否可行。

答案 1 :(得分:0)

当我运行在无头模式下运行chrome的heroku中部署的Web爬网脚本时,我遇到了相同的问题。我通过在我的选项列表中添加以下chrome选项来解决了该问题

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--window-size=1920x1080") #I added this

就像您在问题中的评论中提到的那样,可能有两件事可能使某些元素无法显示

  1. 您所使用的分辨率不会显示该元素(或类似的东西),我已经通过添加该选项解决了该问题
  2. 您正在搜索尚未加载的元素。我建议适当等待(已使用stores变量完成),也可以使用

     try:
        # Wait until 'what you specified' is visible
        WebDriverWait(driver, 60) \
            .until(expected_conditions.visibility_of_element_located((By.XPATH, './/span[@class="storeCount-txt"]')))
     except Exception as exp:
        print("Exception occured", exp)
        driver.quit()
    

希望这会有所帮助