【问题标题】:Inconsistent results retrieving data with Selenium in Python在 Python 中使用 Selenium 检索数据的结果不一致
【发布时间】:2021-12-05 21:42:56
【问题描述】:
driver = webdriver.Chrome(driver_path, options=chrome_options)
wait = WebDriverWait(driver, 20)

driver.get('https://%s/' % asset_id)

wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id='dev_diaginfo_fid']")))

print(driver.find_element_by_xpath('//*[@id='dev_diaginfo_fid']").get_attribute=("innerHTML"))

我可以登录网站,Selenium 返回 WebElement,但从该 WebElement 返回文本时不一致。有时它会返回它,有时它似乎加载速度不够快(正在使用它的网络速度很慢)并且根本不返回任何数据,但我仍然可以看到 WebElement 本身而不是数据。数据通过JS动态加载。可能不相关,但我正在使用 send_keys 传递登录所需的凭据,然后加载包含该版本的页面。

有没有办法使用 ExpectedCondition (EC) 等到它看到文本后再继续?我正在尝试从网络设备中提取固件版本,它找到了固件元素,但在返回实际固件版本时不一致。如前所述,网络速度偶尔会出现问题,所以我怀疑它在加载固件编号之前正在继续。此设备无法访问 Internet,因此我无法共享 URL。我可以确认我已经提取了固件版本,但它只是不一致。

我已经尝试将它传递给 beautifulsoup,并且可以验证它看到的是 Firmware Version: 但内部标签是空的。

编辑:我也尝试过 EC.visibility_of_all_elements 和 EC.visibility_of_element,但没有成功。

【问题讨论】:

  • 不确定是否可行,但请尝试使用EC.visibility_of_element_located
  • 我也尝试过 EC.visibility_of_element_located。我将编辑原件并添加

标签: python selenium web-scraping selenium-chromedriver


【解决方案1】:

这是一个想法。

尝试while循环,直到看到文本。

counter = 0

elem = driver.find_element_by_xpath("//*[@id='dev_diaginfo_fid']").get_attribute=("innerHTML")

while "" in elem:
    pause(500)
    elem = driver.find_element_by_xpath("//*[@id='dev_diaginfo_fid']").get_attribute=("innerHTML")
    if "" not in elem:
        print("Success! The text is: " + elem)
        break
    if counter > 20:
        print("Text still not found!")
        break
    counter += 1

显然,调整循环以满足您的需要。

【讨论】:

  • 无论出于何种原因,这都不能正确运行成功循环,但是通过运行循环,它确实可以加载数据并且可以在之后拾取,因此我将其标记为已解决。谢谢!
  • 也许条件应该是 >> while not elem: > if not elem:
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
相关资源
最近更新 更多