python - 在动态变化的 html 中抓取隐藏元素
问题描述
我需要从动态变化的 html 中抓取一些信息。有问题的网站是: https ://www.mitartlending.com/featuredartworks 。在这里,当您单击给定图像并将鼠标悬停在放大的图像上时,会弹出一个文本叠加层。我正在尝试抓取该文本。在尝试使用 BS 进行此操作后,我决定可能不得不使用硒。你将如何解决这个问题?到目前为止,我有:
from selenium import webdriver
driver = webdriver.Chrome('/Users/Abramo/SeleniumDrivers/chromedriver')
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver.get('https://www.mitartlending.com/featuredartworks')
driver.implicitly_wait(3)
my_element = driver.find_element_by_xpath(f'/html/body/div[5]/div[2]/div/main/section/div/div/div/div[3]/div/div/div/div[1]/div/a/img')
my_element.click()
copy_from = driver.find_element_by_class_name('sqs-lightbox-meta overlay-description-visible')
my_next_button = driver.find_element_by_class_name('sqs-lightbox-next')
解决方案
您可以通过以下方式找到这些图像中的任何一个
images = driver.find_elements_by_xpath('//img[contains(@class,'thumb-image loaded')]')
因此,例如,单击您可以使用的第二张图片
images[1].click()
要将鼠标悬停在元素上,您可以执行以下操作:
from selenium.webdriver.common.action_chains import ActionChains
hover = ActionChains(driver).move_to_element(images[1])
hover.perform()
现在,当文本出现时,您可以找到并获取它
text = driver.find_elements_by_xpath('(//img[contains(@class,'thumb-image loaded')])[2]/..//p').text
可以对那里的任何其他图像执行相同的操作。
总而言之,代码将如下所示:
from selenium.webdriver.common.action_chains import ActionChains
images = driver.find_elements_by_xpath('//img[contains(@class,"thumb-image loaded")]')
images[1].click()
time.sleep(2)
hover = ActionChains(driver).move_to_element(images[1])
hover.perform()
time.sleep(2)
text = driver.find_elements_by_xpath('(//img[contains(@class,"thumb-image loaded")])[2]/..//p')
for t in text:
print(t.text)
我添加了 sleeps 只是为了让它变得简单,而最好使用预期的条件等待来代替
推荐阅读
- django - Django中的用户登录系统,以MongoDB为主数据库
- javascript - 如何让数字显示在警报框中而不是 NAN
- input - 读后执行写
- python - 如何在 Python 中将随机生成的变量保存到程序中?
- c# - 如何使损害客户端团结一致?
- python - 使用漂亮的汤 python 从标签中提取 html ID
- javascript - 声明接口而不是类型
- vue.js - 将 v-bind 添加到属性时 v-dialog 的 v-btn 消失
- c# - 我们如何在 PDFLib set-graphics-option 中传递专色值列表?
- javascript - 使用 map() 从另一个数组元素值更改数组元素顺序