Имитация нажатия на ссылку javascript в Python

Пытаюсь собрать отзывы о ресторанах. Urllib2 отлично работает для начальной страницы отзывов, но затем есть ссылка для загрузки следующего приращения комментариев, которое является ссылкой javascript. Пример страницы находится здесь, а код ссылки «Следующие 25»:

<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$RestRatings$Next','')" class="red" id="ctl00_ContentPlaceHolder1_RestRatings_Next">NEXT 25&gt;&gt; </a>

Я просмотрел все предыдущие ответы (например, ), и я должен сказать, что я не в этом мудр. Глядя на консоль в Firebug, нет удобной ссылки. Не могли бы вы предложить лучший (самый простой) способ добиться этого?

Изменить: благодаря Seleniumnewbie этот код распечатает все комментарии из обзоров .:

from selenium import webdriver
from BeautifulSoup import BeautifulSoup
import re

driver = webdriver.Firefox()

def getURLinfo(url):

    driver.get(url)
    html = driver.page_source
    next25 = "ctl00_ContentPlaceHolder1_RestRatings_Next"
    soup = BeautifulSoup(html)

    while soup.find(id=re.compile(next25)):            
        driver.find_element_by_id(next25).click()
        html = html + driver.page_source
        soup = BeautifulSoup(driver.page_source)

    soup = BeautifulSoup(html)
    comment = soup.findAll(id=re.compile("divComment"))

    for entry in comment:
        print entry.div.contents #for comments

    driver.close()

person eamon1234    schedule 18.11.2012    source источник


Ответы (2)


Найдите элемент по id="ctl00_ContentPlaceHolder1_RestRatings_Next" и щелкните его.

person Amey    schedule 18.11.2012

Когда пользователь щелкает эту ссылку, функция __doPostBack вызывается в javascript на клиенте. Ссылка на другой заданный вами вопрос предполагает, что эта функция выполняет вызов AJAX, а затем помещает результат на ту же страницу.

Однако страницы обзора, на которые вы ссылаетесь, этого не делают. Он делает вызов AJAX, но затем перезагружает ту же страницу. Мне не удалось уловить, что такое вызов AJAX, потому что он немедленно перезагружается, но поскольку страница просто перезагружается с новыми комментариями, я почти уверен, что он говорит серверу, чтобы он переместил вас на следующую страницу.

Итак, чтобы получить следующую страницу комментариев, вам нужно будет вызвать тот же URL-адрес, который вызывает функция __doPostBack, а затем перезагрузить страницу, на которой вы находитесь. Чтобы найти этот URL-адрес, я де-запутываю их javascript и найду вызываемую функцию. Я считаю, что фактический URL-адрес, который будет вызываться, будет зависеть от параметра этой функции, поэтому вы хотите обязательно воспроизвести то, что он делает.

person Matth    schedule 18.11.2012
comment
Спасибо, я не смог найти что-то похожее на URL-адрес в javascript (www, http, review), поэтому я выбрал подход грубой силы селена! - person eamon1234; 18.11.2012