python - 更改 AJAX 页面中的下拉值后,Python Selenium Webdriver 不刷新 html
问题描述
我正在尝试使用 Python 和 Selenium 抓取 AJAX 网页。问题是,当我更改下拉值时,页面内容会根据我的选择而更改,但 selenium 从页面返回相同的旧 html 代码。如果有人可以提供帮助,我将不胜感激。这是我的代码:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
import time
url = "https://myurl.com/PATH"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(5)
# change the dropdown value
sprintSelect = Select(driver.find_element_by_id("dropdown-select"))
sprintSelect.select_by_visible_text("DropDown_Value2")
html = driver.execute_script("return document.documentElement.outerHTML")
print(html)
解决方案
选择后需要等待 ajax 加载网站。尝试在选择后放置隐式或显式等待。
driver.implicitly_wait(10) # 10 seconds
或者,如果您知道所需 Web 元素的标签/ID 等,请尝试显式
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "some_ID"))
推荐阅读
- python - 如何组合这两个numpy数组?
- python - 如何使用 PythonRecipe(python-for-android) 添加 python 库?
- python - TypeError:预期的 unicode,得到 pandas._libs.properties.CachedProperty
- r - 考虑ggplot2中不同标准误差的剖面图
- c++ - 是什么导致了 boost C++ asio 中的 asio.misc.3 错误
- r - 在 R 中,使用 curl 的包时如何使用 Google 的 DNS?
- c# - 无法从“方法组”转换为“对象”
- c++ - 如何从 std::string 为 fstream 创建一个缓冲区
- c# - DocuSign 嵌入式签名。可以为信封中的所有签名者选择“签名”选项卡位置的用户
- r - 在 R 中的 for 循环内的子集中引用变量列名