使用“显示更多”按钮抓取网页

时间:2021-05-03 15:45:52

标签: javascript python selenium web-scraping xpath

我想用“显示更多”按钮抓取谷歌学者页面。使用此平台的帮助解决我之前问过的一个问题,我编写了以下代码,以便单击“显示更多”按钮。但是,我仍然遇到问题。对于带有多个“显示更多”按钮的配置文件,只有第一个被点击。我不明白为什么会发生这种情况。我将不胜感激。

from selenium import webdriver
import time
from bs4 import BeautifulSoup
import pandas as pd

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
chrome_path = r"C:\Users\ish05\Desktop\python\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

driver.get("https://scholar.google.com/citations?user=cp-8uaAAAAAJ&hl=en")
time.sleep(3)
show_more = driver.find_elements_by_tag_name('button')
for x in range(len(show_more)):
    if show_more[x].is_displayed():
      driver.execute_script("arguments[0].click();", show_more[x])
      time.sleep(3)

2 个答案:

答案 0 :(得分:1)

它运行一个的原因是因为它在每一页上出现一个。

您需要使用无限循环,然后在页面上搜索如果有然后点击否则不再有按钮中断循环。

from selenium import webdriver
import time
chrome_path = r"C:\Users\ish05\Desktop\python\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)

driver.get("https://scholar.google.com/citations?user=cp-8uaAAAAAJ&hl=en")
time.sleep(3)
while True:
    try:       
        show_more = driver.find_element_by_xpath("//button[.//span[text()='Show more'] and not(@disabled)]")
        driver.execute_script("arguments[0].click();", show_more)
        print("Show more button clicked")
        time.sleep(2)
    except:
        print("No more Show more button")
        break

您将在控制台上看到以下输出

Show more button clicked
Show more button clicked
Show more button clicked
Show more button clicked
Show more button clicked
No more Show more button

答案 1 :(得分:0)

首先,我看到该页面上有 19 个标签名称为 button 的元素,而其中只有 1 个是 Show more 按钮,可以通过以下 xpath 找到:{{ 1}}
所以只有点击这个元素才会点击//button[.//*[contains(text(),'Show more')]],而点击其他按钮会执行其他操作,其中的一些按钮元素也是不可点击的。