【问题标题】:How do I click on "More" button when webscraping Tripadvisor using selenium?使用 selenium 抓取 Tripadvisor 时如何单击“更多”按钮?
【发布时间】:2016-10-26 06:15:49
【问题描述】:

我正在尝试对 Tripadvisor 上的书面评论页面进行网络抓取,但在点击展开页面上所有书面评论的“更多”按钮时遇到了困难。我查看了类似的查询(感谢 Saurabh Gaur),但是当使用 selenium 单击按钮时,会弹出此登录页面。

login page photo

有没有办法在不触发的情况下点击“更多”按钮?谢谢! :)

from selenium import webdriver
import re
from bs4 import BeautifulSoup

def clicker(url):
    browser = webdriver.Firefox()
    browser.get(url)

    
    # Use regex to find that button link
    pageSource = browser.page_source
    soup = BeautifulSoup(pageSource, 'html.parser')

    # Example: soup.findAll(True, {'class': re.compile(r'\bclass1\b')})
    Regex = re.compile(r'.*\bmoreLink.ulBlueLinks.*')
    linkElem = soup.find('span', class_=Regex)['class']
    linkElem = '.'.join(linkElem[0:(len(linkElem)+1)])
    moreButton = 'span.' + linkElem

    print(moreButton)

    button = browser.find_element_by_css_selector(moreButton)
    print(button)
    
    browser.execute_script("arguments[0].click()", button) 
    
clicker('https://www.tripadvisor.com.sg/Hotel_Review-g295424-d1209362-Reviews-Residence_Spa_at_One_Only_Royal_Mirage_Dubai-Dubai_Emirate_of_Dubai.html')
 

【问题讨论】:

  • 谢谢!我已经尝试过,它仍然无法正常工作。我仍然得到登录页面。这是他们的某种形式的反刮擦措施吗?请帮忙!

标签: javascript python selenium web-scraping


【解决方案1】:

这是一个示例代码供您参考,您可以将 selenium 与 phantomjs 一起使用并单击按钮。我已经使用了函数“find_element_by_name”中需要的标签的名称属性,您可以根据您的要求进行修改。

from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
from selenium import webdriver
def openUrl(link):
    driver = webdriver.PhantomJS(
                executable_path='../../phantomjs/bin/phantomjs')
            try:
                driver.get(link)
            except HTTPError as e:
                print ('Error opening ' + link)
                continue
            try:
                bsObj = BeautifulSoup(driver.page_source)
            except AttributeError as e:
                return None

            try:
                elem1 = driver.find_element_by_name('checkAndShowAnswers')
                elem1.click()
            except:
                continue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多