当每大约 1 秒添加新的 div 时,如何使用 Python 从 Selenium 中的 div 中提取文本?
How to extract text from divs in Selenium using Python when new divs are added every approx 1 second?
我正在尝试使用 Selenium 从网页上的 divs
中提取内容。
网页是动态生成的,每隔一秒左右就会有一个新的 div 插入到网页上的 HTML 中。
到目前为止我有以下代码:
from selenium import webdriver
chrome_path = r"C:\scrape\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://website.com/")
messages = []
for message in driver.find_elements_by_class_name('div_i_am_targeting'):
messages.append(message.text)
for x in messages:
print(x)
效果很好,问题是它只在 运行 时在页面上打印 divs
的值,我想连续从 [=14= 中提取文本] 并且每隔一秒左右就会有新的 divs
出现在页面上。
我发现了这个:
Handling dynamic div's in selenium
这是我能找到的最相关的问题,但它与我的问题不匹配,而且没有答案。
我如何更新上面的代码,以便它在页面上为我选择的 div(在本例中为 div_i_am_targeting
)连续打印 div 的内容,包括新的在程序 运行time?
之后添加到页面的 divs
您可以应用以下代码连续打印所需div的内容:
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium import webdriver
chrome_path = r"C:\scrape\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://website.com/")
# Get current divs
messages = driver.find_elements_by_class_name('div_i_am_targeting')
# Print all messages
for message in messages:
print(message.text)
while True:
try:
# Wait up to minute for new message to appear
wait(driver, 60).until(lambda driver: driver.find_elements_by_class_name('div_i_am_targeting') != messages)
# Print new message
for message in [m.text for m in driver.find_elements_by_class_name('div_i_am_targeting') if m not in messages]:
print(message)
# Update list of messages
messages = driver.find_elements_by_class_name('div_i_am_targeting')
except:
# Break the loop in case no new messages after minute passed
print('No new messages')
break
我正在尝试使用 Selenium 从网页上的 divs
中提取内容。
网页是动态生成的,每隔一秒左右就会有一个新的 div 插入到网页上的 HTML 中。
到目前为止我有以下代码:
from selenium import webdriver
chrome_path = r"C:\scrape\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://website.com/")
messages = []
for message in driver.find_elements_by_class_name('div_i_am_targeting'):
messages.append(message.text)
for x in messages:
print(x)
效果很好,问题是它只在 运行 时在页面上打印 divs
的值,我想连续从 [=14= 中提取文本] 并且每隔一秒左右就会有新的 divs
出现在页面上。
我发现了这个: Handling dynamic div's in selenium 这是我能找到的最相关的问题,但它与我的问题不匹配,而且没有答案。
我如何更新上面的代码,以便它在页面上为我选择的 div(在本例中为 div_i_am_targeting
)连续打印 div 的内容,包括新的在程序 运行time?
您可以应用以下代码连续打印所需div的内容:
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium import webdriver
chrome_path = r"C:\scrape\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://website.com/")
# Get current divs
messages = driver.find_elements_by_class_name('div_i_am_targeting')
# Print all messages
for message in messages:
print(message.text)
while True:
try:
# Wait up to minute for new message to appear
wait(driver, 60).until(lambda driver: driver.find_elements_by_class_name('div_i_am_targeting') != messages)
# Print new message
for message in [m.text for m in driver.find_elements_by_class_name('div_i_am_targeting') if m not in messages]:
print(message)
# Update list of messages
messages = driver.find_elements_by_class_name('div_i_am_targeting')
except:
# Break the loop in case no new messages after minute passed
print('No new messages')
break