Python 用登录页面抓取网站

Python 用登录页面抓取网站,python,selenium-chromedriver,web-scripting,Python,Selenium Chromedriver,Web Scripting,我目前使用以下脚本从网站登录到时间 browser = webdriver.Chrome('E:/Shared Folders/Users/runnerjp/chromedriver/chromedriver.exe') browser.get("https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F") time.sleep(3) username = browser.find_el

我目前使用以下脚本从网站登录到时间

browser = webdriver.Chrome('E:/Shared Folders/Users/runnerjp/chromedriver/chromedriver.exe')
browser.get("https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F") 
time.sleep(3)
username = browser.find_element_by_id("EmailAddress")
password = browser.find_element_by_id("Password")
username.send_keys("usr")
password.send_keys("pass")
login_attempt = browser.find_element_by_xpath("//input[@type='submit']")
time.sleep(3)
login_attempt.submit()

它可以工作,但我发现使用ChromeWeb驱动程序对我的CPU造成了冲击。是否有其他代码可供我使用,但这并不意味着我需要实际加载页面才能登录?

请使用
请求
。您可以使用它登录:

import requests
requests.get('https://api.github.com/user', auth=('user', 'pass'))
更多信息请点击此处:

使用无头浏览器将大大减少CPU和内存的消耗,请尝试使用Chrome浏览器。这里有一篇关于将PhantomJS与selenium结合使用的博客文章:


另一种选择是“抓取”模块:

from grab import Grab

g = Grab()
g.go('https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F')
g.doc.set_input('EmailAddress','some@email.com')
g.doc.set_input('Password','somepass')
g.doc.submit()

print g.doc.body

你可以使用mechanize,在我的旧笔记本中,我花了3.22秒登录和解析该站点

from mechanize import Browser
import time    #just to check elapsed time and check performance
started_time = time.time()

browser = Browser()
url = 'https://www.timeform.com/horse-racing/account/sign-in?returnUrl=%2Fhorse-racing%2F'
browser.open(url)
browser.select_form(nr = 0)
browser["EmailAddress"] = 'putyouremailhere'
browser["Password"] = 'p4ssw0rd'

logged = browser.submit()
redirected_url = logged.read()
print redirected_url

#you can delete this section:
elapsed_time = time.time() - started_time
print elapsed_time,' seconds'

我希望有帮助!:)

这里的所有答案都有一些优点,但这取决于被刮取的网站类型以及如何验证登录。
如果网页通过javascript/ajax请求等生成部分或全部内容,那么使用selenium是唯一的方法,因为这允许执行javascript。然而,为了将cpu使用率保持在最低限度,您可以使用“无头”浏览器,如phantomjs。phantomjs使用与chrome相同的html引擎和javascript引擎,因此您可以使用chrome测试代码,并在最后切换

如果页面内容为“静态”,则可以使用
请求
模块。 但是,执行此操作的方法将取决于网页是否使用嵌入http协议的“基本”身份验证(大多数情况下不使用),在这种情况下:

import requests
requests.get('https://api.github.com/user', auth=('user', 'pass'))
正如CodeMonkey所建议的


但是,如果它使用了其他内容,您必须分析登录表单,查看post请求发送到的地址,并使用该地址构建请求,并将用户名/密码放入表单上元素ID的字段中。

有几种方法可以执行此操作:

  • 如果您确实需要完整的selenium功能(Javascript等),请尝试使用无头浏览器驱动程序(例如) 但是,您不会像选择第二种方式(如下)那样节省cpu时间
  • 您可以使用一些轻量级工具,例如,或,来代替相当重的selenium。这样可以节省大量cpu时间,但它们不支持javascript,并且缺少selenium所具有的一些高级功能

  • 是的,除了硒或铬之外,我应该说,除了无头浏览器之外,您应该使用http(调用url)的概念

    请求和urllib模块将在这里提供帮助

    为此,您需要确定方法的参数和类型。一旦确定了调用url所需的内容,就可以使用request或urllib。你还需要跟踪你正在得到或将得到什么样的回应

    这是一个很好的文档

    使用请求的示例:

    案例:这里我们提交的表单有两个字段id和pwd,表单中指定的方法是post,表单中指定的名称分别是user_id和user_pwd for id和pwd。点击一个按钮,它就会调用“某个url”

    关于如何使用请求、cookie和selenium,请参考我的其他答案。

    我向您推荐。它在引擎盖下使用了扭曲,因此非常高效

    如果您需要执行JavaScript,还有一个scrapy启动包:

    在Scrapy FAQ中有一个关于登录页面的特殊页面:

    您可以使用TestCafe

    TestCafe是用于web功能测试(e2e测试)的免费开源框架。TestCafe基于Node.js,根本不使用WebDriver

    TestCafe支持的测试在服务器端执行。为了获得DOM元素,TestCafe提供了强大灵活的选择器系统。TestCafe可以使用ClientFunction特性在测试过的网页上执行JavaScript(请参阅我们的文档)

    TestCafe测试真的很快,你自己看看吧。但由于内置智能等待系统,高速试运行不会影响稳定性

    TestCafe的安装非常简单:

    1) 检查电脑上是否有Node.js(或安装)

    2) 要安装TestCafe open cmd并键入:

    npm install -g testcafe
    
    写作测试不是一门火箭科学。下面是一个快速入门:1)将以下代码复制粘贴到文本编辑器中,并将其另存为“test.js”

    import { Selector } from ‘testcafe’;
    
    fixture `Getting Started`
        .page `http://devexpress.github.io/testcafe/example`;
    
    test(‘My first test’, async t => {
        await t
            .typeText(‘#developer-name’, ‘John Smith’)
            .click(‘#submit-button’)
            .expect(Selector(‘#article-header’).innerText).eql(‘Thank you, John Smith!‘);
    });
    
    2) 通过在cmd中键入以下命令,在浏览器(如chrome)中运行测试:

    testcafe chrome test.js
    
    3) 在控制台输出中获取描述性结果

    TestCafe允许您针对各种浏览器进行测试:本地、远程(在设备上,无论是Raspberry Pi浏览器还是iOS Safari浏览器)、云(如Saint Labs)或无头(如噩梦)。这意味着您可以轻松地将TestCafe与连续集成基础架构结合使用

    You can use the same to scrape data and save to file easily
    

    回溯(最近一次调用):文件“E:\Shared Folders\Users\runnerjp\FootballPload\Scrape timeform.py”,第1行,从mechanize导入浏览器文件“C:\Python34\lib\site packages\mechanize\u init\uuuz.py”,第119行,在from\u version import version importorror:没有名为“\u version”的模块中,我在运行代码时遇到上述错误-im使用Python3.4并进行了mechanizeinstalled@emmaperkins啊!看来mechanize还不支持Python3.x!但是您可以使用特定的2.x版本的Python运行脚本!
    You can use the same to scrape data and save to file easily