有了上一博文学习即基础,这一节想来学习下自动登录淘宝。

直接整上测试代码:

from selenium import webdriver
# import logging
import time
from selenium.common.exceptions import NoSuchElementException, WebDriverException
from selenium.webdriver import ActionChains# logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# logger = logging.getLogger(__name__)class taobao():def __init__(self):self.browser = webdriver.Chrome("D:/software/chrome/chromedriver_win32/chromedriver.exe")# 最大化窗口self.browser.maximize_window()self.browser.implicitly_wait(5)self.domain = 'http://www.taobao.com'self.action_chains = ActionChains(self.browser)def login(self, username, password):while True:self.browser.get(self.domain)time.sleep(1)# 会xpath可以简化这几步# self.browser.find_element_by_class_name('h').click()# self.browser.find_element_by_id('fm-login-id').send_keys(username)# self.browser.find_element_by_id('fm-login-password').send_keys(password)self.browser.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()self.browser.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(username)self.browser.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(password)time.sleep(1)try:# 出现验证码,滑动验证slider = self.browser.find_element_by_xpath("//span[contains(@class, 'btn_slide')]")if slider.is_displayed():# 拖拽滑块self.action_chains.drag_and_drop_by_offset(slider, 258, 0).perform()time.sleep(0.5)# 释放滑块,相当于点击拖拽之后的释放鼠标self.action_chains.release().perform()except (NoSuchElementException, WebDriverException):#logger.info('未出现登录验证码')print('未出现登录验证码')# 会xpath可以简化点击登陆按钮# self.browser.find_element_by_class_name('password-login').click()self.browser.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()nickname = self.get_nickname()if nickname:#logger.info('登录成功,呢称为:' + nickname)print('登录成功,呢称为:' + nickname)break#logger.debug('登录出错,5s后继续登录')print('登录出错,5s后继续登录')time.sleep(5)def get_nickname(self):self.browser.get(self.domain)time.sleep(0.5)try:return self.browser.find_element_by_class_name('site-nav-user').textexcept NoSuchElementException:return ''if __name__ == '__main__':# 填入自己的用户名,密码username = 'username'password = 'password'tb = taobao()tb.login(username, password)

有时候登陆的时候会出现滑动条,这个也好解决,还是复制 XPath 匹配元素,然后使用 Selenium 的 ActionChains 方法,拖动滑块。
这就是代码中有个try-catch语句,去判断是都存在滑动条,有的话就去滑动的代码。

后来我们发现我们还是等不上去,原因是淘宝存在反Selenium的操作,只要是使用 Selenium 完成的点击事件,淘宝就不让你登录。

因此我们需要借助另外个更加强大的库pyautogui
pyautogui 功能强大,可以操控电脑的鼠标,可以模拟鼠标的动作,于是就可以欺骗过淘宝。

安装方法:python -m pip install pyautogui

也就是说,在登录的时候,换成使用pyautogui来根据登录的字样和图片来使用鼠标点击模拟。所以整体代码没变,只是在最后登录的时候选择了该工具进行鼠标模拟点击。

那么代码如下:

from selenium import webdriver
import logging
import time
from selenium.common.exceptions import NoSuchElementException, WebDriverException
from retrying import retry
from selenium.webdriver import ActionChainsimport pyautoguipyautogui.PAUSE = 0.5logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)class taobao():def __init__(self):self.browser = webdriver.Chrome("path\to\your\chromedriver.exe")# 最大化窗口self.browser.maximize_window()self.browser.implicitly_wait(5)self.domain = 'http://www.taobao.com'self.action_chains = ActionChains(self.browser)def login(self, username, password):while True:self.browser.get(self.domain)time.sleep(1)# 会xpath可以简化这几步# self.browser.find_element_by_class_name('h').click()# self.browser.find_element_by_id('fm-login-id').send_keys(username)# self.browser.find_element_by_id('fm-login-password').send_keys(password)self.browser.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click()self.browser.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(username)self.browser.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(password)time.sleep(1)try:# 出现验证码,滑动验证slider = self.browser.find_element_by_xpath("//span[contains(@class, 'btn_slide')]")if slider.is_displayed():# 拖拽滑块self.action_chains.drag_and_drop_by_offset(slider, 258, 0).perform()time.sleep(0.5)# 释放滑块,相当于点击拖拽之后的释放鼠标self.action_chains.release().perform()except (NoSuchElementException, WebDriverException):logger.info('未出现登录验证码')# 会xpath可以简化点击登陆按钮,但都无法登录,需要使用 pyautogui 完成点击事件# self.browser.find_element_by_class_name('password-login').click()# self.browser.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click()# 图片地址coords = pyautogui.locateOnScreen('1.png')x, y = pyautogui.center(coords)pyautogui.leftClick(x, y)nickname = self.get_nickname()if nickname:logger.info('登录成功,呢称为:' + nickname)breaklogger.debug('登录出错,5s后继续登录')time.sleep(5)def get_nickname(self):self.browser.get(self.domain)time.sleep(0.5)try:return self.browser.find_element_by_class_name('site-nav-user').textexcept NoSuchElementException:return ''if __name__ == '__main__':# 填入自己的用户名,密码username = 'username'password = 'password'tb = taobao()tb.login(username, password)

本文参考自:
https://jackcui.blog.csdn.net/article/details/106757531
感谢!

Python《使用Selenium 和pyautogui 实现自动登录淘宝》相关推荐

  1. Github配置(git+vscode+python+jupyter)

    ①下载git 打开 git bash 工具的用户名和密码存储 $ git config --global user.name "Your Name" $ git config -- ...

  2. 【实验楼】python简明教程

    ①终端输入python进入 欣赏完自己的杰作后,按 Ctrl + D 输入一个 EOF 字符来退出解释器,你也可以键入 exit() 来退出解释器. ②vim键盘快捷功能分布 ③这里需要注意如果程序中 ...

  3. 【Kaggle Learn】Python 5-8

    五. Booleans and Conditionals Using booleans for branching logic x = True print(x) print(type(x))''' ...

  4. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  5. 使用python愉快地做高数线代题目~

    今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...

  6. python 位运算与等号_Python 运算符

    和大多数语言一样,Python也有很多运算符,并且运算符跟其他语言的运算符大同小异接下来一一介绍: 算术运算符: 运算符描述实例 +加 - 两个对象相加a+b的输出结果是30 -减 - 得到复数或者一 ...

  7. python减小内存占用_如何将Python内存占用缩小20倍?

    当程序执行过程中RAM中有大量对象处于活动状态时,可能会出现内存问题,特别是在对可用内存总量有限制的情况下. 下面概述了一些减小对象大小的方法,这些方法可以显著减少纯Python程序所需的RAM数量. ...

  8. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...

    本文实例讲述了Python实现对文件进行单词划分并去重排序操作.,具体如下: 文件名:test1.txt 文件内容: But soft what light through yonder window ...

  9. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

  10. Python gRPC 安装

    1. 安装依赖库 sudo pip3 install grpcio sudo pip3 install protobuf sudo pip3 install grpcio_tools 2. 生成对应文 ...

最新文章

  1. ORA-01109:数据库未打开(解决)
  2. GBDT和GNN结合,结果怎么样?
  3. Tensorflow—创建图
  4. Java成员方法遵循动态绑定机制
  5. matlab电压稳定极限,电力系统电压稳定性的Matlab建模分析
  6. linux桌面变成黑白,用虚拟机装了linux后开启为什么界面是黑色的呢?
  7. 一个有钱人儿子写的作文!
  8. 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>
  9. 如何开启MySQL的慢查询日志
  10. 配置8086汇编环境
  11. 深入浅出matplotlib(9):知道两点坐标画直线
  12. pytorch CNN手写字体识别
  13. Win10多用户同时远程桌面,并各自操作互不干扰
  14. Matplotlib 中文用户指南 4.8 XeLaTeX/LuaLaTeX 设置
  15. B.TMT Document (思维分析)
  16. 疯狂的红色石头孵化出疯狂的鸡蛋
  17. 分布式锁 - Redisson的看门狗(watchdog)机制
  18. 关于WIN10 VS2015下调试DirectX11 DEMO错误的解决方案
  19. 微信去除EMOJI表情
  20. 史上最全NLP工具数据集下载汇总,不用积分就能下载

热门文章

  1. python 之Requests库学习笔记
  2. MATLAB的PLOT函数线型设置及横坐标为字符串的代码实例
  3. DP! | 不要怂!
  4. apache和tomcat有什么不同,为什么要整合apache 和tomcat?
  5. SQL Server 2012之初次安装
  6. 免费流量监控软件,最大可同时监控1000台电脑
  7. Node.js框架对比:Express/Koa/Hapi
  8. 容器编排技术 -- Kubernetes kubectl create deployment 命令详解
  9. 容器编排技术 -- Kubernetes 给容器和Pod分配内存资源
  10. python坐标系不均匀_Python处理不平衡数据