相关疑难解决方法(0)

使用Python中的PhantomJS向下滚动到无限页面的底部

我成功地使用Selenium和PhantomJS来重新加载动态加载的无限滚动页面,如下例所示.但是如何修改它以便不是手动设置一些重载,程序在达到最低点时停止了?

reloads = 100000 #set the number of times to reload
pause = 0 #initial time interval between reloads
driver = webdriver.PhantomJS()

# Load Twitter page and click to view all results
driver.get(url)
driver.find_element_by_link_text("All").click()

# Keep reloading and pausing to reach the bottom
for _ in range(reloads):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(pause)

text_file.write(driver.page_source.encode("utf-8"))
text_file.close()
Run Code Online (Sandbox Code Playgroud)

python phantomjs selenium-webdriver

19
推荐指数
1
解决办法
1万
查看次数

使用 Selenium 缓慢向下滚动页面

我正在尝试从航班搜索页面抓取一些数据。

这个页面是这样工作的:

您填写表格,然后单击按钮搜索 - 没问题。当您单击按钮时,您将被重定向到带有结果的页面,这就是问题所在。此页面连续添加结果,例如一分钟,这没什么大不了的 - 问题是要获得所有这些结果。当您在真实浏览器中时,您必须向下滚动页面,才会出现这些结果。所以我尝试使用 Selenium 向下滚动。它在页面底部向下滚动可能如此之快,或者它是跳转而不是滚动页面不会加载任何新结果。

当您缓慢向下滚动时,它会重新加载结果,但如果您非常快速地向下滚动,它会停止加载。

我不确定我的代码是否有助于理解,所以我附上了它。

SEARCH_STRING = """URL"""

class spider():

    def __init__(self):
        self.driver = webdriver.Firefox()

    @staticmethod
    def prepare_get(dep_airport,arr_airport,dep_date,arr_date):
        string = SEARCH_STRING%(dep_airport,arr_airport,arr_airport,dep_airport,dep_date,arr_date)
        return string


    def find_flights_html(self,dep_airport, arr_airport, dep_date, arr_date):
        if isinstance(dep_airport, list):
            airports_string = str(r'%20').join(dep_airport)
            dep_airport = airports_string

        wait = WebDriverWait(self.driver, 60) # wait for results
        self.driver.get(spider.prepare_get(dep_airport, arr_airport, dep_date, arr_date))
        wait.until(EC.invisibility_of_element_located((By.XPATH, '//img[contains(@src, "loading")]')))
        wait.until(EC.invisibility_of_element_located((By.XPATH, u'//div[. = "Poprosíme o trpezlivos?, h?adáme pre Vás ešte viac letov"]/preceding-sibling::img')))
        self.driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

        self.driver.find_element_by_xpath('//body').send_keys(Keys.CONTROL+Keys.END)
        return self.driver.page_source

    @staticmethod 
    def get_info_from_borderbox(div):
        arrival = div.find('div',class_='departure').text …
Run Code Online (Sandbox Code Playgroud)

python selenium scroll selenium-webdriver

9
推荐指数
4
解决办法
1万
查看次数

使用selenium python webdriver滚动网页

我正在抓取这个网页上的用户名,滚动后加载用户

网址:" http://www.quora.com/Kevin-Rose/followers "

我知道页面上的用户数量(在这种情况下编号为43812)如何滚动页面直到所有用户都被加载?我已经在互联网上搜索了同样的内容,并且在任何地方我都得到了几乎相同的代码行,这样做:

driver.execute_script("window.scrollTo(0,)")

如何确定垂直位置以确保所有用户都已加载?有没有其他选项来实现相同的东西而不实际滚动?

   from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import urllib

driver = webdriver.Firefox()
driver.get('http://www.quora.com/')
time.sleep(10)

wait = WebDriverWait(driver, 10)

form = driver.find_element_by_class_name('regular_login')
time.sleep(10)
#add explicit wait

username = form.find_element_by_name('email')
time.sleep(10)
#add explicit wait

username.send_keys('abc@gmail.com')
time.sleep(30)
#add explicit wait

password = form.find_element_by_name('password')
time.sleep(30)
#add explicit wait

password.send_keys('def')
#add explicit wait

password.send_keys(Keys.RETURN)
time.sleep(30)

#search = driver.find_element_by_name('search_input')
search = wait.until(EC.presence_of_element_located((By.XPATH, …
Run Code Online (Sandbox Code Playgroud)

python selenium web-scraping python-2.7 selenium-webdriver

5
推荐指数
1
解决办法
8354
查看次数

使用Python requests.get来解析一次不加载的html代码

我正在尝试编写一个Python脚本,该脚本将定期检查网站以查看项目是否可用.我过去成功使用了requests.get,lxml.html和xpath来自动化网站搜索.对于此特定网址(http://www.anthropologie.com/anthro/product/4120200892474.jsp?cm_vc=SEARCH_RESULTS#/)和其他人在同一网站上,我的代码无效.

import requests
from lxml import html
page = requests.get("http://www.anthropologie.com/anthro/product/4120200892474.jsp?cm_vc=SEARCH_RESULTS#/")
tree = html.fromstring(page.text)
html_element = tree.xpath(".//div[@class='product-soldout ng-scope']")
Run Code Online (Sandbox Code Playgroud)

在这一点上,html_element应该是一个元素列表(我认为在这种情况下只有1),但它是空的.我认为这是因为网站没有一次加载,所以当requests.get()熄灭并抓住它时,它只抓住第一部分.所以我的问题是1:我对问题的评估是否正确?和2:如果是这样,有没有办法让request.get()在返回html之前等待,或者可能是另一条路径完全获取整个页面.

谢谢

编辑:感谢两位回复.我使用Selenium并让我的脚本工作.

html python web-scraping python-requests

3
推荐指数
1
解决办法
7829
查看次数