爬虫三(模拟登陆)

Posted jweiqing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫三(模拟登陆)相关的知识,希望对你有一定的参考价值。

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 os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

chromedriver = "C:Program Files (x86)GoogleChromeApplicationchromedriver.exe"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = 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 random
import time

def randomSleep(minS, maxS):
time.sleep((maxS - minS) * random.random() + minS)
browser = webdriver.Chrome(r"C:Program Files (x86)GoogleChromeApplicationchromedriver.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 random
import time

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

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

# Login by username and password
randomSleep(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 password
randomSleep(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 time
randomSleep(5, 10)
browser.find_element_by_id("loginsubmit").click()


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

browser.quit()

 

8、思考

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

 



































以上是关于爬虫三(模拟登陆)的主要内容,如果未能解决你的问题,请参考以下文章

简单爬虫模拟登陆phpmyadmin

怎样用Python设计一个爬虫模拟登陆知乎

怎样用Python设计一个爬虫模拟登陆知乎

怎样用Python设计一个爬虫模拟登陆知乎?

Python爬虫 —— 知乎之selenium模拟登陆+requests.Session()获取cookies

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