Python 爬虫模拟登陆,破解滑块验证码_pyautogui 阿里滑块

res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)
# 获取最佳匹配位置
value = cv2.minMaxLoc(res)
# 返回最佳X坐标
return value[2][0]

打开FireFox浏览器

driver = webdriver.Firefox()
driver.get(“https://passport.jd.com/new/login.aspx”)
driver.find_element_by_xpath(‘/html/body/div[2]/div[2]/div[1]/div/div[3]/a’).click()
driver.find_element_by_xpath(‘//*[@id=“loginname”]’).send_keys(‘123456’)
driver.find_element_by_xpath(‘//*[@id=“nloginpwd”]’).send_keys(‘123456’)
driver.find_element_by_xpath(‘//*[@id=“loginsubmit”]’).click()

while True:
try:
# 从网页上获取组件
target = driver.find_element_by_xpath(‘/html/body/div[4]/div/div/div/div[1]/div[2]/div[1]/img’)
template = driver.find_element_by_xpath(‘/html/body/div[4]/div/div/div/div[1]/div[2]/div[2]/img’)
# 获取模块的url路径
src1 = target.get_attribute(“src”)
src2 = template.get_attribute(“src”)
# 下载图片
request.urlretrieve(src1,“img1.jpg”)
request.urlretrieve(src2,“img2.png”)
x = findPic()
w1 = cv2.imread(‘img1.jpg’).shape[1]
w2 = target.size[‘width’]
x = x / w1 * w2
# 按钮坐标
offset_x,offset_y = 875,466
# pyautogui库操作鼠标指针
pyautogui.moveTo(offset_x,offset_y,duration=0.1 + random.uniform(0,0.1 + random.randint(1,100) / 100))
pyautogui.mouseDown()
offset_y += random.randint(9,19)
pyautogui.moveTo(offset_x + int(x * random.randint(15,25) / 20),offset_y,duration=0.28)
offset_y += random.randint(-9,0)
pyautogui.moveTo(offset_x + int(x * random.randint(17,23) / 20),offset_y,
duration=random.randint(20,31) / 100)
offset_y += random.randint(0,8)
pyautogui.moveTo(offset_x + int(x * random.randint(19,21) / 20),offset_y,
duration=random.randint(20,40) / 100)
offset_y += random.randint(-3,3)
pyautogui.moveTo(x + offset_x + random.randint(-3,3),offset_y,duration=0.5 + random.randint(-10,10) / 100)
offset_y += random.randint(-2,2)
pyautogui.moveTo(x + offset_x + random.randint(-2,2),offset_y,duration=0.5 + random.randint(-3,3) / 100)
pyautogui.mouseUp()
time.sleep(1)
result = driver.find_element_by_xpath(‘/html/body/div[2]/div[2]/div[1]/div/div[4]/div[2]/div’).text
if ‘不匹配’ in result:
print(“账户名密码不匹配!”, result)
break
except:
print(“异常!”)
break


### 技术



> 
> selenium
> 
> 
> 


网上都说selenium是一个自动化测试的类库,其他的先不说,selenium用在爬虫上是真的般配,用selenium实现模拟的登陆,操作页面上的各种组件,完全代替了人工,简直神器啊,细节我就不说了,初学的小伙伴可以先去了解一下selenium库。


账号输入,点击之后就是验证码的界面,这个时候就需要另一个神器了。



> 
> opencv
> 
> 
> 


opencv是Python第三方库,处理计算机视觉方面。


验证码登陆必须要进行图像处理,借用京东的滑块验证码来说明一下。


我们只需要封装一个函数,在之前selenium操作显示出验证码之后,通过页面解析获取验证码的图片和滑块的图片(2张都要,下面简称大图和小图),  
 然后图像灰度处理,找出大图的缺口的位置,注意点就是图片和网页上的比例,还有就是图片是否有边界,总之就是找出在页面上滑块应该移动的距离。


找出距离之后就是移动滑块了,通过selenium移动就可以完成整个流程了。



**(1)Python所有方向的学习路线(新版)**  

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。



![在这里插入图片描述](https://img-blog.csdnimg.cn/1f807758e039481fa866130abf71d796.png#pic_center)



**(2)Python学习视频**



包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

![在这里插入图片描述](https://img-blog.csdnimg.cn/d66e3ad5592f4cdcb197de0dc0438ec5.png#pic_center)



**(3)100多个练手项目**

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

![在这里插入图片描述](https://img-blog.csdnimg.cn/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android App中接入HTML5滑块验证,你需要进行以下步骤: 1. 在Android App中嵌入WebView组件用于加载HTML5页面。 2. 在HTML5页面中引入阿里滑块验证码的JS SDK,并初始化验证码。 3. 在Android App中实现WebView的相关回调方法,以便在WebView中与JS交互。 下面是一个简单的实现示例: 1. 在布局文件中添加WebView组件 ``` <WebView android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在Activity中加载HTML5页面,并初始化验证码 ``` public class MainActivity extends AppCompatActivity { private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = findViewById(R.id.web_view); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // 初始化阿里滑块验证SDK view.loadUrl("javascript:window.initSlideVerify()"); } }); mWebView.loadUrl("file:///android_asset/index.html"); } // 与JS交互的回调方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } } ``` 3. 在HTML5页面中引入阿里滑块验证码的JS SDK,并初始化验证码 ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>滑块验证Demo</title> <script src="https://g.alicdn.com/sd/slide/0.1.4/slide.min.js"></script> </head> <body> <div id="verify-wrap"></div> <script> window.initSlideVerify = function() { var slideVerify = new SlideVerify('#verify-wrap', { mode: 'pop', vOffset: 5, barSize: { width: '100%', height: '50px' }, ready: function() { console.log('滑块验证组件初始化成功!'); }, success: function() { console.log('滑块验证通过!'); // TODO: 在JS中向Android发送验证通过的消息 } }); }; </script> </body> </html> ``` 这样就可以在Android App中接入HTML5滑块验证了。需要注意的是,在JS中向Android发送消息需要通过WebView的`addJavascriptInterface()`方法实现,具体可参考Android官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值