当使用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)时,输出为空:
> ""
有什么想法吗?
答案 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
就像您在问题中的评论中提到的那样,可能有两件事可能使某些元素无法显示
您正在搜索尚未加载的元素。我建议适当等待(已使用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()
希望这会有所帮助