[我正在使用this topic中的代码来尝试使用无头浏览器来获取网站的HTML。这是我的完整代码:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
binary = r'C:\Program Files\Mozilla Firefox\firefox.exe'
options = Options()
options.add_argument("-headless")
options.add_argument("headless")
options.add_argument("--headless")
options.headless = True
options.binary = binary
cap = DesiredCapabilities().FIREFOX
driver = webdriver.Firefox(options=options, executable_path="C:\\Users\\Aviv\\Downloads\\geckodriverv0.26.0-win64\\geckodriver.exe")#,capabilities=cap)
driver.get("https://coronaupdates.health.gov.il/corona-updates/grid/public-transport")
print(driver.find_elements_by_class_name("mat-row"))
当我只运行代码并打印时,结果为空列表:[]但是,如果我使用Pycharm评估程序,则会得到包含20个元素的列表。
看起来评估程序和代码中的实际命令执行不同,或者分配工作不顺利。
我将不胜感激。谢谢!
[我怀疑它会打印[]
,因为没有在DOM
中加载所需的类元素,并且当您使用评估程序时,它可能会等到完整的DOM
更新完成。在后一种情况下,这就是它返回与给定类匹配的元素的方式。
尝试在脚本中添加睡眠呼叫
import time
options.headless = True
options.binary = binary
cap = DesiredCapabilities().FIREFOX
driver = webdriver.Firefox(options=options, executable_path="C:\\Users\\Aviv\\Downloads\\geckodriverv0.26.0-win64\\geckodriver.exe")#,capabilities=cap)
driver.get("https://coronaupdates.health.gov.il/corona-updates/grid/public-transport")
time.sleep(5) # Delays for 5 seconds.
print(driver.find_elements_by_class_name("mat-row"))
也可以在无头和无头模式下使用Explicit vs Implicit wait calls进行求值。