目标:

控制浏览器点击、输入,登录大众点评

环境:

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、点击登录

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、选择账号登录

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)

3.2 选择账号登录

账号登录包括账户密码登录和账户验证码登录,首先尝试账号密码登录。

# 选择账号登录
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、手机验证码登录

如果账密登录失败,尝试手机验证码登录

4.1 检测失败警告

    try:#账号登录失败警告alert = browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/div[1]/div[3]/span')except NoSuchElementException:break

4.2 切换到手机验证码登录

    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_)

4.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)

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登录大众点评相关推荐

  1. Python+selenium+firefox登录微博并爬取数据(2)

    上次写到安装完成环境,并且成功访问到微博首页(未登录状态).后来发现新浪的登录机制太繁琐,所以放弃selenium登录,转向使用新浪官方Api 爬取数据.但是,写完之后才发现,调用接口也有限制.没办法 ...

  2. python访问陌生人qq空间_使用Python+Selenium模拟登录QQ空间

    使用Python+Selenium模拟登录QQ空间 爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleni ...

  3. python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...

    python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07

  4. Python selenium 模拟登录bilibili

    Python selenium 模拟登录bilibili ​ Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. ​ 在登录bil ...

  5. python爬虫爬取大众点评店铺简介信息

    python爬虫爬取大众点评店铺简介信息 写作目的: 爬取目标 大众点评的保护机制 应对方法 还存在的问题 写作目的: 今天帮朋友一个忙,要爬取一些大众点评上的数据.结果发现大众点评的防爬机制还挺多的 ...

  6. python爬虫实战一|大众点评网

    PS:如果不懂的可以看我的上一篇文章快速入门Python爬虫 阶段 类型 问题 需要做到 1 请求 网页数据在哪里? 发现网址url规律 2 请求 如何获取网页数据 先尝试使用requests成功访问 ...

  7. Python+selenium+firefox模拟登录微博并爬取数据(1

    1:环境python3.5,最新 firefox,selenium-3.14.0. 本来准备用无界面的,但是感觉效果不好看出来所以先用有界面的浏览器来做.分几次来慢慢写.这节先配置好环境. 2:安装: ...

  8. python +selenium+phantomjs 登录爬取新浪微博动态js页面

    登录新浪微博 最近新浪微博好烦,都取消不了验证码这个难搞得东西,而且跳来跳去,一改版以前的代码就都不能用了.目前整理的资料有三种方法: 1. 设Cookie:简单粗暴,免去了模拟登录的好多麻烦,只是要 ...

  9. python爬虫爬取大众点评并导入redis

    直接上代码,导入redis的中文编码没有解决,日后解决了会第一时间上代码!新手上路,多多包涵! # -*- coding: utf-8 -*- import re import requests fr ...

最新文章

  1. Ubuntu 14.04 64bit上安装Intel官方集显更新驱动程序
  2. Java-001-面向对象
  3. 扩增子图表解读5火山图:差异OTU的数量及变化规律
  4. C++ 容器vector的范例学习
  5. linux系统之编译安装mysql
  6. 接口经常超时?线程池+ FutureTask来解决!
  7. 分享 | 来看看阿里、华为、字节的PM是怎么工作的......
  8. 操作系统提供什么服务、如何服务?
  9. 哪吒:猪八戒十年DevOps演进之路
  10. JQuery与springmvc实现单个文件上传操作
  11. ipersistfile save 失败 错误代码“0x80070005” 拒绝访问的解决办法
  12. 【语言-c#】应用程序正常初始化(0xc000007b)失败。请单击“确定”,终止应用程序。
  13. JavaScript格式化数字
  14. 【解决方案】EasyCVR安防视频云服务城市污水处理厂解决方案
  15. 如何引用阿里巴巴矢量图标库的图标
  16. 用Quartus实现2-4线,3-8线,4-16线译码器及控制七段数码管
  17. Matlab三相变两相公式,交流电机三相两相坐标互换及MATLAB仿真
  18. Python 学习笔记 列表 range() xxx XXX
  19. 第四次工业革命:自主经济的崛起
  20. SqlServer数据库常用连接字符串

热门文章

  1. 零时 || 数字钱包面临的安全风险有哪些?
  2. 一罐子水是如何电击上千人的呢?
  3. 淘宝IP地址库获取到省市IP地址
  4. 【电子电路技术】短波红外InGaAs探测器简析
  5. KZ笔记6:弹跳原理
  6. 41.83亿元!985北京航空航天大学青岛校区最新进展来了
  7. C++ 解决输入字符串分割成正整数的问题
  8. js版 3D坦克大战 V0.5
  9. oracle查询的默认排序,oracle 默认排序及认知
  10. WEB页面源代码查看