【发布时间】:2021-08-24 08:12:32
【问题描述】:
我已经用请求 + 美丽的汤从第一页抓取了我想要的元素,并尝试使用 selenium 单击一个按钮,该按钮加载另一个页面,其中包含我想要抓取的其余数据。新的 selenium 窗口打开第一页,然后打开第二页,但总是返回某种 selenium.common.exceptions 错误。 File "c:\Users\ArkPr\yelp\yelp_learner.py", line 122, in <module> WebDriverWait(driver, 10).until( File "C:\Users\ArkPr\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\support\wait.py", line 80, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message:
我四处搜索并尝试使用隐式和显式等待 time.sleep(),使用 find_element_by_class_name 和 xpath,使用请求获取数据,我不知道下一步该做什么。
url = "https://www.yelp.co.uk/search?find_desc=Restaurants&find_loc=London&ns=1"
试图从该站点抓取数据
next_page = driver.find_element_by_class_name("css-ac8spe")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "css-ac8spe"))
)
# element.clear()
element.click()
except TimeoutException as u:
print(u)
# if EC.presence_of_element_located((By.CLASS_NAME, "css-ac8spe")) == True:
# next_page.click()
# next_page.back()
for li in ul:
#driver.implicitly_wait(3)
WebDriverWait(driver, 10).until(
EC.visibility_of_all_elements_located((By.CLASS_NAME, 'stickySidebar__373c0__3MPss border-color--default__373c0__r305k')))
# EC.presence_of_element_located((By.CLASS_NAME, 'stickySidebar__373c0__3MPss border-color--default__373c0__r305k')))
sidebar = driver.find_element_by_class_name('stickySidebar__373c0__3MPss border-color--default__373c0__r305k')
if sidebar != None:
for side in sidebar:
print(side)
if side != None:
try:
address = side.find("p", {"class": " css-chtywg"})
# address = side.find_element_by_class_name("css-chtywg")
print(address.text)
except TimeoutException as t:
print(t)```
【问题讨论】:
-
页面弹出cookie接受模态需要先去掉。请记住,除非您预加载配置文件,否则您将获得一个干净的用户会话。尝试使用 ID 或 XPATH,xpath 是本机 webdriver 元素,可能更容易捕获。
-
你要抓取的具体数据是什么?
-
我只是想抓取餐厅的地址。这个页面的 'p', {'class': 'css-chtywg'} 位里面有什么。