爬虫三(模拟登陆)

1、Selenium工具

Selenium是ThroughtWorks公司开发的一套Web自动化测试工具,它分为三个组件:

  • Selenium IDE
  • Selenium RC (Remote Control)
  • Selenium Webdriver

Selenium IDE是firefox的一个插件,允许测试人员录制脚本并回放。

Selenium RC和Selenium Webdriver是测试框架,提供多种语言的API。不同的是,Selenium Webdriver以一种更底层、更灵活的方式来操作浏览器,并不仅仅使用JavaScript。这样它可以绕开浏览器的沙箱限制,实现Selenium RC不支持的框架、弹出窗口、页面导航、下拉菜单、基于AJAX的UI元素等控件的操作。以及,Selenium Webdriver不需要本地服务器。

Selenium 1.x版本只包含前两个组件。从2.0开始Webdriver加入其中,主要是来解决https的加密问题。

2、Webdriver的使用

在使用之前,不需要下载一个浏览器所对应用的驱动插件,请根据自己不同的浏览器版本进行下载

链接:https://pan.baidu.com/s/1qZ2LfmW 密码:qixa

下载以后,并把chromdriver放在google.exe那个当前目录下面

import osfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keys

chromedriver = "C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe"os.environ["webdriver.chrome.driver"] = chromedriverdriver = webdriver.Chrome(chromedriver)

driver.get("http://www.python.org")driver.quit()

3、八种选择器

①、find_elements_by_name(“test”)

页面:

<input type="text" name="passwd" id="passwd-id"  class=”input-class”/>

代码:

element = driver.find_elements_by_name(“passwd”)

②、find_elements_by_id()

element = driver.find_element_by_id(“passwd-id”)
    By.tagname()
element = driver.find_element_by_tagname(“input”)

③、find_element_by_class_name(‘input-class’)

④、find_elements_by_tag_name(‘iframe’)

DOM的Tag元素

用Tag name 定位元素的例子:

<iframe src="..."></iframe>

element = driver.find_elements_by_tag_name("iframe")

⑤、find_element_by_link_text()

页面:

<a href="http://www.google.com/search?q=baidu">baidu</a>

代码:

element = browser.find_elements_by_link_text("baidu")

⑥、xpath   这个特别强大,所有的元素都可以通过这个可以找到

XPath是XML Path的简称,由于HTML文档本身就是一个标准的XML页面,所以我们可以使用XPath的语法来定位页面元素。

绝对路径: 根元素开始,及html开始用/

相对路劲: 任意符合条件的元素 //

查找页面上所有的input元素://input

查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示,单/号)://form[1]/input

查找页面上第一个form元素内的所有子input元素(只要在form元素内的input都算,不管还嵌套了多少个其他标签,使用相对路径表示,双//号)://form[1]//input

查找页面上第一个form元素://form[1]

查找页面上id为loginForm的form元素://form[@id=‘loginForm‘]

查找页面上具有name属性为username的input元素://input[@name=‘username‘]

查找页面上id为loginForm的form元素下的第一个input元素://form[@id=‘loginForm‘]/input[1]

查找页面具有name属性为contiune并且type属性为button的input元素://input[@name=‘continue‘][@type=‘button‘]

查找页面上id为loginForm的form元素下第4个input元素://form[@id=‘loginForm‘]/input[4]

4、控件操作

输入框:

element.clear()     清空输入框数据

element.sendkeys(“username”)      发送数据

element.text         获取文本的值

按钮:

element.click()

表单提交

element.submit()

单选和多选框

element.clear()

element = browser.find_elements_by_id(‘ checkbox‘)

##选择某个单选项:

element.click()

5、常用方法

browser.get_cookies()

browser.title        头名字

browser.close()

forward()       前进,browser.foeward()

.back()      后退,browser.back()

.refresh()      刷新,browser.refresh()

.current_url      返回当前页面url,browser.current_url

6、登录12306

from selenium import webdriver

import randomimport time

def randomSleep(minS, maxS):    time.sleep((maxS - minS) * random.random() + minS)browser = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")

url = "https://kyfw.12306.cn/otn/login/init"

browser.get(url=url)print(browser.find_element_by_id("username").text)browser.find_element_by_id("username").clear()browser.find_element_by_id("username").send_keys("[email protected]")randomSleep(2, 5)browser.find_element_by_id("password").send_keys(“xxxxxxxxx")randomSleep(1, 4)time.sleep(6)browser.find_element_by_id("loginSub").click()randomSleep(2, 5)print(browser.get_cookies())browser.quit()

7、登录京东

from selenium import webdriver

import randomimport time

def randomSleep(minS, maxS):    time.sleep((maxS - minS) * random.random() + minS)browser = webdriver.Chrome(r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")# browser = webdriver.Chrome()

# Homebrowser.get("https://passport.jd.com/new/login.aspx")

# Login by username and passwordrandomSleep(1, 2)browser.find_element_by_xpath("//a[@clstag=‘pageclick|keycount|201607144|2‘]").click()# browser.find_element_by_tag_name("pageclick|keycount|201607144|2").click()

# Username and passwordrandomSleep(1, 2)browser.find_element_by_id("loginname").send_keys(“xxxxxxx")print(browser.find_element_by_id("loginname").text)

randomSleep(1, 3)browser.find_element_by_id("nloginpwd").send_keys(“xxxxxx")

# Submit, wait for a long timerandomSleep(5, 10)browser.find_element_by_id("loginsubmit").click()

print(browser.get_cookies())randomSleep(3, 5)

browser.quit()

8、思考

在centos等linux服务器上,如果通过无界面的方式进行登录呢

原文地址:https://www.cnblogs.com/Jweiqing/p/9189457.html

时间: 2024-11-02 01:56:42

爬虫三(模拟登陆)的相关文章

Python——新浪微博爬虫之模拟登陆

在编写微博爬虫的过程中,免不了要进行模拟登录,因为新浪微博不登陆只能访问少量的微博信息. 然而,由于新浪微博的反爬虫功能在不断更新,例如改变了密码的加密算法(RSA),以前的一些模拟登陆方式已经不适用了.所以一开始试了好几种方法,均不能成功.后来受http://www.jb51.net/article/46053.htm启发,已经实现了. 目前,亲测能用的步骤是:①通过预登录,使用GET方法,获得登录所需的servertime, nonce, pubkey, rsakv:②使用encode64加

爬虫实现模拟登陆豆瓣

一: # -*- encoding:utf-8 -*- import requests from bs4 import BeautifulSoup import urllib import re loginUrl = 'http://accounts.douban.com/login' formData={ "redir":"http://movie.douban.com/mine?status=collect", "form_email":&q

爬虫模拟登陆校园网并抓取作业

首先打开校园网的网络教学平台http://eol.zhbit.com/homepage/common/ 找到相应的表单代码 用户名的name是IPT_LOGINUSERNAME 密码的name是IPT_LOGINPASSWORD 提交的地址是http://www.zhbit.com/homepage/common/login.jsp 通过浏览器的抓包发现确实只有这两个数据提交 提交成功后页面变成这样 点击进入 发现地址已经变成http://eol.zhbit.com/main.jsp 所以我们的

爬虫实例(三):模拟登陆新浪

1.在模拟登陆的过程中第一步需要得到登陆前信息,用户名和密码通过js预先加密,所以必须要先将js预先加密的servertime和nonce和pubkey得到,下面json模块和re得到预先加密的信息 1 #---coding:utf-8--- 2 import urllib2 3 import re 4 import json 5 def get_servertime(): 6 url="http://login.sina.com.cn/sso/prelogin.php?entry=weibo&

Node爬虫——利用superagent模拟登陆

一.概述 最近学习了node,试着写了个爬虫,这是模拟登陆的一部分. 1.需要的工具 2.superagent用法的简述 3.抓包分析 4.最小示例 二.需要的工具 nodejs,superagent,wireshark. nodejs没什么可介绍的. superagent是nodejs众多插件之一,用npm命令安装.是一个超轻的ajax api,有着可读性强,高度灵活,学习曲线低的优点. wireshark是一个抓包工具,很强大.之后我们需要用它来分析post请求与cookie. 三.supe

运维学python之爬虫高级篇(六)scrapy模拟登陆

上一篇介绍了如何爬取豆瓣TOP250的相关内容,今天我们来模拟登陆GitHub. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 抓包工具:fiddler 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 分析登陆提交信息分析登陆信息我使用的是fiddler,fiddler的使用方法就不作介绍了,大家可以自行搜索,首先我们打开github的登陆页面,输入用户名密码,提交查看fiddler获取的信息,我这

Scrapy 爬虫模拟登陆的3种策略

1   Scrapy 爬虫模拟登陆策略 前面学习了爬虫的很多知识,都是分析 HTML.json 数据,有很多的网站为了反爬虫,除了需要高可用代理 IP 地址池外,还需要登录,登录的时候不仅仅需要输入账户名和密码,而且有可能验证码,下面就介绍 Scrapy 爬虫模拟登陆的几种策略. 1.1  策略一:直接POST请求登录 前面介绍的爬虫 scrapy 的基本请求流程是 start_request 方法遍历 start_urls 列表,然后 make_requests_from_url方法,里面执行

python爬虫 模拟登陆校园网-初级

最近跟同学学习爬虫的时候看到网上有个帖子,好像是山大校园网不稳定,用py做了个模拟登陆很有趣,于是我走上了一条不归路..... 先上一张校园网截图 首先弄清一下模拟登陆的原理: 1:服务器判定浏览器登录使用浏览器标识,需要模拟登陆 2: 需要post账号,密码,以及学校id python走起,我用的2.7版本,用notepad++写的,绑定python可以直接运行 由于是模拟网页登陆,需要导入urllib urllib2 cookielib库,前两个有与网页直接的接口,cookielib就是用来

网络爬虫模拟登陆获取数据并解析实战(二)

目录 分析要获取的数据 程序的结构 构建封装数据的model 模拟登陆程序并解析数据 结果展示 分析要获取的数据 下面继续实战,写一个模拟登陆获取汽车之家,用户信息的程序.如果大家对模拟登陆获取数据不太了解,建议看完http://blog.csdn.net/qy20115549/article/details/52249232,我写的这篇含有抓包获取人人网数据的案例程序,研究透之后,再来看这个要轻松很多. 首先,大家打开汽车之家这个网站(http://i.autohome.com.cn/7741

爬虫再探实战(二)———模拟登陆豆瓣(续集。。)

关于豆瓣,还是算是爬虫友好型的网站,之前模拟登陆也很容易就成功了,不过最近要在豆瓣抓点东西,发现代码已经不能用了.打印源码发现,需要验证码了. 所以,这里写个续集...较上一篇改动主要在验证码和一个随机字符串的获取,再之后加入pyload就行了.具体参照代码. import re import requests headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko)