Python某宝脚本初步(已绕过反扒滑块)
1.简介
本程序的主要适用于想要初步了解脚本基本原则的人,实际程序的反应速度远达不到实际抢单的要求,但是对于脚本的起步学习入门有一定程度的帮助,能够引导读者建立初步的思想,便于之后深层次的了解
2.案例运行条件
浏览器(本文以chrome
浏览器为例)
ChromeDriver
python3
3.源代码
# -*- coding:utf-8 -*-
#!/usr/bin/python3
from selenium import webdriver
import time
from selenium.webdriver.chrome import options
# 淘宝账号和密码,字符串形式
name = 'xxxxxxxxxx'
password = '12345678'
# 绕过淘宝反扒 实现步骤之后有详解
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument("--disable-blink-features=AutomationControlled")
# 访问淘宝
browser = webdriver.Chrome(options=options)
browser.get("https://www.taobao.com/")
# 寻找登录按钮并且输入账号密码
browser.find_element_by_link_text("亲,请登录").click()
browser.find_element_by_id('fm-login-id').send_keys(name)
browser.find_element_by_id('fm-login-password').send_keys(password)
time.sleep(0.5)
browser.find_element_by_class_name('fm-btn').click()
# 找到购物车
time.sleep(1)
browser.find_element_by_id('J_MiniCart').click()
# 找到购物车中某个商品的选择对话框并点击
time.sleep(0.5)
browser.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div/div[1]/div/div/label").click()
# 提交订单进入付款页面
time.sleep(0.5)
browser.find_element_by_id('J_SmallSubmit').click()
4.实现步骤详解
1.思想
首先,对于HTML
的语法各位并不陌生,HTML
中显示的页面都是以各种元素的形式展开,所以在检索的过程中要始终抓住要检索位置独特的属性,从而准确的找到目标,且尽量要用最快速的方法;
其次,在程序实际执行的过程中我们会发现,chrome
浏览器会自动将访问模式定义为无头模式,也就是headless
,并且各大电商实际上对selenium
都在做一定程度的防范,比如: "直接使用webdriver
"驱动淘宝网时,登陆的过程中会一直出现一个即使手动也不能清除的滑块,出现这个之后也就意味着,当前的程序不足以登录淘宝网,所以本程序中选择绕开淘宝网自身对selenium
的监控,从而直接登录。
剩下的就是具体的操作,除了反扒过程比较有些知识点之外,其他的部分只要耐心就可以很轻松的解决。
2.详解
1.组件的安装
1.python3
的安装
windows
环境下安装python3
比较容易,只要从官网下载安装包装到合适的位置,并且修改环境变量就可以,便不赘述。
2.ChromeDriver
安装
注意:在下载ChromeDriver
版本的时候,一定要明确当前自己chrome的版本号,选择对应的版本下载,避免不必要的麻烦。
下载网址:ChromeDriver
下载完成,解压,将其放在Python安装路径中Scripts
文件夹中
3.selenium
安装
这里建议先安装pip3
,下载解压后执行setup.exe
,之后用pip3
命令直接下载:
pip3 install selenium
之后就可以正常的使用了
2.各片段回顾
1.导包
# -*- coding:utf-8 -*-
#!/usr/bin/python3
from selenium import webdriver
import time
from selenium.webdriver.chrome import options
2.绕过反脚本
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument("--disable-blink-features=AutomationControlled")
headless状态下的浏览器打开淘宝网输入密码很容易被系统监控为爬虫机器人,从而被滑块拦截,所以此步骤就是修改打开浏览器时的状态,为普通用户
3.访问
browser = webdriver.Chrome(options=options)
browser.get("https://www.taobao.com/")
4.按F12
,找到对应属性去find,然后click即可
# 寻找登录按钮并且输入账号密码
browser.find_element_by_link_text("亲,请登录").click()
browser.find_element_by_id('fm-login-id').send_keys(name)
browser.find_element_by_id('fm-login-password').send_keys(password)
time.sleep(0.5)
browser.find_element_by_class_name('fm-btn').click()
# 找到购物车
time.sleep(1)
browser.find_element_by_id('J_MiniCart').click()
# 找到购物车中某个商品的选择对话框并点击
time.sleep(0.5)
browser.find_element_by_xpath("/html/body/div[1]/div[2]/div[2]/div/div[2]/div[2]/div[1]/div/div[1]/div/div/label").click()
# 提交订单进入付款页面
time.sleep(0.5)
browser.find_element_by_id('J_SmallSubmit').click()
这里需要提示以下两点:
实在没有办法的情况下再考虑xpath
搜索,因为他会很大程度上影响程序执行的速度,能用简单的id,class,name
就坚决不用xpath
,也省下寻找相关元素的时间。
同时,考虑到实际的执行情况,延时函数是必要的,因为在页面没有加载出来之前如果程序执行到那一步的时候就会自动停止而不会等待页面响应之后继续执行,给页面响应提供一定的缓冲时间。
以上就是本篇文章的全部内容,如果读者觉得对你有帮助的话,请一键三连哦!