如何在 python 中使用 selenium 跟踪动态更新代码
How to track dynamically updating code using selenium in python
如何跟踪网站上的动态更新代码?
在某个网站上,有一部分代码显示通知。此代码经常更新,我想使用 selenium 来捕获更改。
示例:
# Setting up the driver
from selenium import webdriver
EXE_PATH = r'C:/Users/mrx/Downloads/chromedriver.exe'
driver = webdriver.Chrome(executable_path=EXE_PATH)
# Navigating to website and element of interest
driver.get('https://whateverwebsite.com/')
element = driver.find_element_by_id('changing-element')
# Printing source at time 1
element.get_attribute('innerHTML')
# Printing source at time 2
element.get_attribute('innerHTML')
时间 1 和 时间 2 返回的代码不同。我当然可以使用一些循环时间来捕获它。
# While loop capturing changes
results=list()
while True:
print("New source")
source=element.get_attribute('innerHTML')
new_source=element.get_attribute('innerHTML')
results.append(source)
while source==new_source:
time.sleep(1)
是否有使用 selenium 的 事件侦听器 更聪明的方法来做到这一点?
new_source=element.get_attribute('innerHTML')
尝试使用selenium方式等待WebDriverWait
,selenium提供了一个方法.text_to_be_present_in_element
,您可以尝试以下方法。
首先你需要导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
试试下面的代码:
element = driver.find_element_by_id('changing-element')
# Printing source at time 1
element.get_attribute('innerHTML')
#something that makes the element change
WebDriverWait(driver, 10).until(expected_conditions.text_to_be_present_in_element((By.ID, 'changing-element'), 'expected_value'))
# Printing source at time 2
element.get_attribute('innerHTML')
但如果找不到,会return一个TimeoutException
错误,请用try/except
处理
如何跟踪网站上的动态更新代码?
在某个网站上,有一部分代码显示通知。此代码经常更新,我想使用 selenium 来捕获更改。
示例:
# Setting up the driver
from selenium import webdriver
EXE_PATH = r'C:/Users/mrx/Downloads/chromedriver.exe'
driver = webdriver.Chrome(executable_path=EXE_PATH)
# Navigating to website and element of interest
driver.get('https://whateverwebsite.com/')
element = driver.find_element_by_id('changing-element')
# Printing source at time 1
element.get_attribute('innerHTML')
# Printing source at time 2
element.get_attribute('innerHTML')
时间 1 和 时间 2 返回的代码不同。我当然可以使用一些循环时间来捕获它。
# While loop capturing changes
results=list()
while True:
print("New source")
source=element.get_attribute('innerHTML')
new_source=element.get_attribute('innerHTML')
results.append(source)
while source==new_source:
time.sleep(1)
是否有使用 selenium 的 事件侦听器 更聪明的方法来做到这一点? new_source=element.get_attribute('innerHTML')
尝试使用selenium方式等待WebDriverWait
,selenium提供了一个方法.text_to_be_present_in_element
,您可以尝试以下方法。
首先你需要导入:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
试试下面的代码:
element = driver.find_element_by_id('changing-element')
# Printing source at time 1
element.get_attribute('innerHTML')
#something that makes the element change
WebDriverWait(driver, 10).until(expected_conditions.text_to_be_present_in_element((By.ID, 'changing-element'), 'expected_value'))
# Printing source at time 2
element.get_attribute('innerHTML')
但如果找不到,会return一个TimeoutException
错误,请用try/except