模拟实践:selenium实现用户登录。
1、创建服务器
本地创建静态网页:
<body>
<form id="frm" action="/" method="post">
<div>用户<input type="text" name="user"></div>
<div>密码<input type="password" name="pwd"></div>
<div><input type="submit" name="login" vaule='登录'></div>
</form>
</body>
创建服务器的完整代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:LingInHeart
#用户登录的服务器
import flask
app=flask.Flask(__name__)
#根目录相应post与get方法
@app.route("/",methods=['POST','GET'])
def login():
user = flask.request.values.get("user") if "user" in flask.request.values else ""
pwd = flask.request.values.get("pwd") if "pwd" in flask.request.values else ""
#设定的用户名与密码,对应执行show方法
if user == "xxx" and pwd == "123":
return flask.redirect("/show")
#否则重新返回本低静态页面
else:
f = open(r'D:\python\Python37\Practise\related data\index.html', 'rb')
data = f.read()
f.close()
return data
@app.route("/show",methods=['POST','GET'])
def show():
s = "<table border='1'>"
s = s + "<tr><td>品牌</td><td>型号</td><td>价格</td></tr>"
s = s + "<tr><td>华为</td><td>P9</td><td>3800</td></tr>"
s = s + "<tr><td>华为</td><td>P10</td><td>4200</td></tr>"
s = s + "<tr><td>苹果</td><td>iPhone6</td><td>5800</td></tr>"
s = s + "</table><p>"
#退出的实现是返回根目录
s = s + "<a href='/'>退出</a>"
return s
app.run()
运行效果:
2、selenium使用元素方法
Selenium 查找 HTML 时返回一个 WebElement 对象,对象不但可以使用它获取元素的属性值,而且它还有动作,主要的动作是键盘输入动作与鼠标点击动作。
2.1 键盘输入
有些元素例如<input type=”text”>
文本输入框是用户可以输入文字的,WebElement 对象element 可以模拟用户的键盘输入动作,主要动作有:
(1) 函数 clear()模拟清除 element 元素中的所有文字;
(2) 函数 send_keys(string)模拟键盘在元素中输入字符串 string;
其中 send_keys 函数不但可以模拟输入一般的文字,而且还可以模拟输入回车、退格等键盘动作,selenium 提供了一个 Keys
类,其中提供了很多常用的不可见的特殊按键,主要有 Keys.BACKSPACE
退格删除键和 Keys.ENTER
回车键。
2.2 鼠标点击动作
很多 HTML 元素都有鼠标点击动作,例如<input type="submit">
提交按钮点击后就提交表单。WebElement 使用 click()函数实现鼠标点击,例如:driver.find_element_by_xpath(“input[@type=’submit’]”).click()
3、爬取数据
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:LingInHeart
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
def login(url):
chrome.get(url)
user=chrome.find_element_by_name('user')
pwd=chrome.find_element_by_name('pwd')
log=chrome.find_element_by_name('login')
user.send_keys('xxx')
time.sleep(0.5)
pwd.send_keys('123')
log.click()
def spider():
x=chrome.find_elements_by_tag_name('tr')
for i in range(1,len(x)):
tds = x[i].find_elements_by_tag_name("td")
if len(tds) == 3:
mark = tds[0].text
model = tds[1].text
price = tds[2].text
print("%-16s%-16s%-16s" % (mark, model, price))
c_s=Options()
c_s.add_argument('--headless')
chrome=webdriver.Chrome(chrome_options=c_s)
login('http://127.0.0.1:5000/')
spider()
chrome.close()
结果: