gpt4 book ai didi

python - Selenium 在 ipython 和文件之间的行为不同

转载 作者:太空宇宙 更新时间:2023-11-04 02:28:18 27 4
gpt4 key购买 nike

我正在尝试抓取纽约州 directory of trial judges .该站点检查是否启用了 javascript,并在呈现页面时显示一条关于需要 python 的简短警告。所以我一直在尝试 Selenium。

但是,当我在 ipython 或 python 中逐行运行以下命令时,它能够正常访问页面。然后,如果我从命令行 (python scraper.py) 运行它,该网站会呈现 javascript 警告 - 但只是在我第一次访问该网站时。发生这种情况:

  • 无论我使用什么浏览器,
  • 无论我是否将其作为 headless 浏览器运行,
  • 无论我尝试设置什么 cookie

我的代码:

import string
import csv
from selenium import webdriver

# Start the browser
browser = webdriver.Firefox()
browser.get(
"https://iapps.courts.state.ny.us/judicialdirectory/JudicialDirectory")
print(browser.title)

# You can run the above 4 lines directly in ipython,
# but if running from the command line, the previous try will not work
browser.get(
"https://iapps.courts.state.ny.us/judicialdirectory/JudicialDirectory")
print(browser.title)

如果它是重要的:我在 Windows 10 上运行它。

有没有人对如何调试有任何建议?

最佳答案

这里的区别在于,当作为脚本运行时,browser.title 在 JS 实际有机会执行之前被访问。您可以通过在获取页面后等待来避免这种情况。使用 time.sleep 很简单

browser.get(...)
time.sleep(1.5)

但是,这可能会导致您等待的时间超过需要的时间。所以用selenium的expected condition support会更好.这样,您只需等待所需的时间即可。

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

condition = EC.presence_of_element_located((By.ID, "some_element_id_present_after_JS_load"))
driver.get(url)
WebDriverWait(driver, 10).until(condition)
print(driver.title)
# ...

关于python - Selenium 在 ipython 和文件之间的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49823526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com