在几秒钟后隐藏的元素上使用Python Selenium抓取Javascript React页面

时间:2019-10-08 19:03:35

标签: javascript python selenium web-scraping beautifulsoup

我正在尝试抓取具有React元素的网页,该元素在几秒钟后隐藏下拉菜单。

这是您第一次进入该页面和我要抓取的标签时看到的内容。

Dropdown element I want to scrape. Specifically the '24' people are viewing this event line.

我正在尝试刮除不要错过的部分! 24人正在观看此活动

几秒钟后,该标签消失,并被另一个下拉元素替换,该元素表示以适当的价格获得通知!

new dropdown that replaces the one i want to scrape. It hides the previous dropdown

源代码显示观看次数下拉菜单在几秒钟后被隐藏。代码的顶部显示了新的下拉列表,而div类中带有'hide'的底部是我要抓取的下拉列表。

The source code showing the hidden dropdown code

我尝试获取 div class =“ urgency-component-container ”,但是由于它被隐藏,它什么也不返回。我也尝试获取 div class =“ dropdown-header-item“ ,但这也没有返回任何内容。

我已经尝试过将XPath放入dropdown-header-item(// * [@ id =“ dropdown-header”] / div / div 1),但这也不起作用。

如何在几秒钟后抓取“隐藏”的下拉菜单?谢谢

编辑:

网站网址为: https://www.stubhub.com/anaheim-ducks-tickets-anaheim-ducks-anaheim-honda-center-11-14-2019/event/104217448/?sort=price%20asc

我使用的代码是

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
url = 'https://www.stubhub.com/anaheim-ducks-tickets-anaheim-ducks-anaheim-honda-center-11-14-2019/event/104217448/?sort=price+asc'
driver.get(url)

content = driver.find_element_by_class_name('dropdown-header-item')

如果我立即执行代码,则会收到错误

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".dropdown-header-item"}

但是如果我等待几秒钟并运行它,我会得到

Get notified at the right price!Set price alert

2 个答案:

答案 0 :(得分:1)

请尝试一下,让我知道如何进行。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome('/usr/local/bin/chromedriver')  # Optional argument, if not specified will search path.
driver.delete_all_cookies()
driver.implicitly_wait(15)
driver.maximize_window()
url = 'https://www.stubhub.com/anaheim-ducks-tickets-anaheim-ducks-anaheim-honda-center-11-14-2019/event/104217448/?sort=price+asc'
driver.get(url)
driver.refresh()

content = driver.find_element_by_xpath("//div[@class='urgency-wrapper']//div[@class='dropdown-header-item']").text
print content

driver.quit()

输出:

  

别错过。 28人正在观看此活动。

答案 1 :(得分:0)

看起来网站不喜欢抓取,并且会向初学者抛出验证码。如果没有验证码,那么您希望最后一个元素的.textContent属性与类dropdown-header-item匹配

from selenium import webdriver

d = webdriver.Chrome()
d.get('https://www.stubhub.com/anaheim-ducks-tickets-anaheim-ducks-anaheim-honda-center-11-14-2019/event/104217448/?sort=price%20asc')
elems = d.find_elements_by_css_selector('.dropdown-header-item')
if len(elems) > 0:
    print(d.find_elements_by_css_selector('.dropdown-header-item')[-1].get_attribute('textContent').replace('\xa0', ' '))
else:
    print('Nada')
相关问题