使用python+selenium+Firefox登录大众点评
控制浏览器点击、输入,登录大众点评
环境:
python-3.5、selenium-3.12.0、Firefox-59.0.3(32位)、geckodriver-v0.20.1-win64
步骤:
1、打开浏览器
#打开浏览器
browser = webdriver.Firefox()
href = 'http://www.dianping.com/'
browser.get(href)
time.sleep(2)
2.1 获取登录按钮路径
本文使用find_element_by_xpath用来定位控件的位置,在打开的浏览器界面点击Shift+Ctrl+C,点击“你好,请登录“按钮选取元素
在浏览器下侧查看器,查看选中的按钮所对应的源码,右键选择复制xpath
2.2 点击登录
将复制好xpath粘贴到代码中,控制浏览器选取登录按键,并点击。
#选取登录按钮
login_btn = browser.find_element_by_xpath('/html/body/div/div[1]/div[1]/div/div[2]/span[2]/a[1]')
#点击登录按钮
login_btn.click()
time.sleep(3)
3.1 切换至登录模块
直接使用浏览器选择xpath复制的路径导致找不到该元素的错误,查找原因发现登录模块是使用iframe嵌入到主页面中的,所以需要先切换到登录iframe才能继续操作。
选取iframe元素,并切换。
#选取并切换至账户登录iframe。
iframe = browser.find_element_by_xpath('/html/body/div[3]/div/div/div/div/iframe')
browser.switch_to_frame(iframe)
账号登录包括账户密码登录和账户验证码登录,首先尝试账号密码登录。
# 选择账号登录
icon_pc = browser.find_element_by_xpath('/html/body/div/div[2]/div[1]')
icon_pc.click()
time.sleep(2)
#选择账密登录
name_login = browser.find_element_by_xpath('//*[@id="tab-account"]')
name_login.click()
time.sleep(2)
# 选取用户名,密码元素
username = browser.find_element_by_xpath('//input[@id="account-textbox"]')
password = browser.find_element_by_xpath('//input[@id="password-textbox"]')
# 输入用户名,密码
username.clear()
username.send_keys(username_)
password.clear()
password.send_keys(password_)
# 提交登陆
sub_btn = browser.find_element_by_xpath('//button[@id="login-button-account"]')
sub_btn.click()
time.sleep(5)
如果账密登录失败,尝试手机验证码登录
4.1 检测失败警告
try:#账号登录失败警告alert = browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/div[1]/div[3]/span')except NoSuchElementException:break
mobile_login = browser.find_element_by_xpath('//*[@id="tab-mobile"]')mobile_login.click()username = browser.find_element_by_xpath('//*[@id="mobile-number-textbox"]')username.clear()username.send_keys(username_)
.3 获取验证码并登录
#点击获取验证码get_code = browser.find_element_by_xpath('//*[@id="send-number-button"]')get_code.click()#输入验证码verify_code = browser.find_element_by_xpath('//*[@id="number-textbox"]')verify_code_ = input('verify_code > ')verify_code.clear()verify_code.send_keys(verify_code_)# 提交登陆sub_btn = browser.find_element_by_xpath('//*[@id="login-button-mobile"]')sub_btn.click()time.sleep(5)
当前页面还处于登录模块的iframe,想进行下一步操作需要切换回整个页面。
#切换回主页
browser.switch_to_default_content()
1、不能识别验证码,需手动输入
2、xpath使用绝对路径,不稳健,可以考虑修改网页元素查找方式。
3、代理如何使用
4、使用cookie登录
完整代码:github
# -*- coding: utf-8 -*-
"""
Created on Sat May 12 12:57:22 2018@author: wmq请使用自己的账号、密码
"""import time
import logging
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException#设置用户名密码
username_ = "********"
password_ = "********"#设置日志等级
logging.basicConfig(level=logging.INFO)#打开浏览器
browser = webdriver.Firefox()
href = 'http://www.dianping.com/'
browser.get(href)
time.sleep(2)# 右上登陆
login_btn = browser.find_element_by_xpath('/html/body/div/div[1]/div[1]/div/div[2]/span[2]/a[1]')
login_btn.click()
time.sleep(3)# 选择账号登录
iframe = browser.find_element_by_xpath('/html/body/div[3]/div/div/div/div/iframe')
browser.switch_to_frame(iframe) #切换至登录模块iframe#选择账号密码登录
icon_pc = browser.find_element_by_xpath('/html/body/div/div[2]/div[1]')
icon_pc.click()
time.sleep(2)
name_login = browser.find_element_by_xpath('//*[@id="tab-account"]')
name_login.click()
time.sleep(2)# 输入用户名,密码
username = browser.find_element_by_xpath('//input[@id="account-textbox"]')
password = browser.find_element_by_xpath('//input[@id="password-textbox"]')
username.clear()
username.send_keys(username_)
password.clear()
password.send_keys(password_)# 提交登陆
sub_btn = browser.find_element_by_xpath('//button[@id="login-button-account"]')
sub_btn.click()
time.sleep(5)while True:#检测是否有登录失败警告try:alert = browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/div[1]/div[3]/span')except NoSuchElementException:breakif alert:#账密登录失败,尝试手机验证码登录mobile_login = browser.find_element_by_xpath('//*[@id="tab-mobile"]')mobile_login.click()username = browser.find_element_by_xpath('//*[@id="mobile-number-textbox"]')username.clear()username.send_keys(username_)#点击获取验证码get_code = browser.find_element_by_xpath('//*[@id="send-number-button"]')get_code.click()#输入验证码verify_code = browser.find_element_by_xpath('//*[@id="number-textbox"]')verify_code_ = input('verify_code > ')verify_code.clear()verify_code.send_keys(verify_code_)# 提交登陆sub_btn = browser.find_element_by_xpath('//*[@id="login-button-mobile"]')sub_btn.click()time.sleep(5)breakelse:raise Exception("Mobile login failed!")#切换回主页
browser.switch_to_default_content()
使用python+selenium+Firefox登录大众点评相关推荐
- Python+selenium+firefox登录微博并爬取数据(2)
上次写到安装完成环境,并且成功访问到微博首页(未登录状态).后来发现新浪的登录机制太繁琐,所以放弃selenium登录,转向使用新浪官方Api 爬取数据.但是,写完之后才发现,调用接口也有限制.没办法 ...
- python访问陌生人qq空间_使用Python+Selenium模拟登录QQ空间
使用Python+Selenium模拟登录QQ空间 爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleni ...
- python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...
python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07
- Python selenium 模拟登录bilibili
Python selenium 模拟登录bilibili Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 在登录bil ...
- python爬虫爬取大众点评店铺简介信息
python爬虫爬取大众点评店铺简介信息 写作目的: 爬取目标 大众点评的保护机制 应对方法 还存在的问题 写作目的: 今天帮朋友一个忙,要爬取一些大众点评上的数据.结果发现大众点评的防爬机制还挺多的 ...
- python爬虫实战一|大众点评网
PS:如果不懂的可以看我的上一篇文章快速入门Python爬虫 阶段 类型 问题 需要做到 1 请求 网页数据在哪里? 发现网址url规律 2 请求 如何获取网页数据 先尝试使用requests成功访问 ...
- Python+selenium+firefox模拟登录微博并爬取数据(1
1:环境python3.5,最新 firefox,selenium-3.14.0. 本来准备用无界面的,但是感觉效果不好看出来所以先用有界面的浏览器来做.分几次来慢慢写.这节先配置好环境. 2:安装: ...
- python +selenium+phantomjs 登录爬取新浪微博动态js页面
登录新浪微博 最近新浪微博好烦,都取消不了验证码这个难搞得东西,而且跳来跳去,一改版以前的代码就都不能用了.目前整理的资料有三种方法: 1. 设Cookie:简单粗暴,免去了模拟登录的好多麻烦,只是要 ...
- python爬虫爬取大众点评并导入redis
直接上代码,导入redis的中文编码没有解决,日后解决了会第一时间上代码!新手上路,多多包涵! # -*- coding: utf-8 -*- import re import requests fr ...
最新文章
- Ubuntu 14.04 64bit上安装Intel官方集显更新驱动程序
- Java-001-面向对象
- 扩增子图表解读5火山图:差异OTU的数量及变化规律
- C++ 容器vector的范例学习
- linux系统之编译安装mysql
- 接口经常超时?线程池+ FutureTask来解决!
- 分享 | 来看看阿里、华为、字节的PM是怎么工作的......
- 操作系统提供什么服务、如何服务?
- 哪吒:猪八戒十年DevOps演进之路
- JQuery与springmvc实现单个文件上传操作
- ipersistfile save 失败 错误代码“0x80070005” 拒绝访问的解决办法
- 【语言-c#】应用程序正常初始化(0xc000007b)失败。请单击“确定”,终止应用程序。
- JavaScript格式化数字
- 【解决方案】EasyCVR安防视频云服务城市污水处理厂解决方案
- 如何引用阿里巴巴矢量图标库的图标
- 用Quartus实现2-4线,3-8线,4-16线译码器及控制七段数码管
- Matlab三相变两相公式,交流电机三相两相坐标互换及MATLAB仿真
- Python 学习笔记 列表 range() xxx XXX
- 第四次工业革命:自主经济的崛起
- SqlServer数据库常用连接字符串