python - 当每大约 1 秒添加新的 div 时,如何使用 Python 从 Selenium 中的 div 中提取文本?

标签 python selenium chrome-web-driver

我正在尝试使用 Selenium 从网页上的 div 中提取内容。 网页是动态生成的,大约每隔一秒就会有一个新的 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)

效果很好,问题是它只在运行时打印页面上 div 的值,我想连续从 the_div_i_am_targeting 中提取文本> 并且每隔一秒左右就会有新的 div 出现在页面上。

我发现了这个: Handling dynamic div's in selenium 这是我能找到的最相关的问题,但它与我的问题不匹配,并且没有答案。

如何更新上述代码,以便它连续打印页面上我选择的 div 的 div 内容(在此示例中 div_i_am_targeting),包括之后添加到页面的新 div程序运行时?

最佳答案

您可以应用以下代码来连续打印所需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

关于python - 当每大约 1 秒添加新的 div 时,如何使用 Python 从 Selenium 中的 div 中提取文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53458309/

相关文章:

python - 如何在 Django 测试框架中修改 session

Python:要求用户输入5个不同的标记

python - Flask 模板无法加载 css

python - 在Python中将Dataframe写入和读取文件的正确方法

python - for 循环中的变量未显示在另一个循环中

java - 检查 Web 元素值的 boolean 方法

python - 使用 Selenium Python 接受 1 个位置参数,但 2 个出现错误

css - 无法找到尝试使用通配符的 xpath 列表包含文本或样式

python - Selenium:Runtime.executionContextCreated 无效 'context':

java - 如何在 java 中使用 selenium webdriver 为 chrome 设置默认下载位置属性?