京东自动登录

## 京东自动登录

注:本文所做操作皆以京东web为例

包含:xpath,splinter,ocr

遇到的坑:  

1. 登录页面通过查看网页元素,能看到账户,密码唯一id,但是执行

   ```
   browser.fill("loginname", name)  # 填写账户密码
   browser.fill("nloginpwd", passwd)
   ```

   报错信息

   ```
   selenium.common.exceptions.InvalidElementStateException: Message: invalid element state: Element is not currently interactable and may not be manipulated 
   ```

   实际原因如下

   ```
   元素你看得到,但是代码要操作的元素是跟随鼠标变更样式的,或者其他条件实时变更的,导致代码不能“看见”。这种情况就需要通过js操作dom元素来适应场景。 
   ```

   经过分析,查看网页源代码可以看到,实际被js代码渲染,可能更改,所以一定要保持页面如真是用户操作一样,方可。所以添加如下代码,解决问题

   ```
       browser.click_link_by_text("账户登录")#使login,passwd可见
       browser.fill("loginname", name)  
       browser.fill("nloginpwd", passwd)
   ```

   2.京东验证吗

   注:京东验证码阻塞了俩天,通过搜索知道京东验证码由三部分组成;

   ```
   acid,uid,yys三部分拼装而成,acid,uid为固定值,可以从页面直接抓取,yys为随机生成的13为字符串,拼装而成的验证码例如url=https://authcode.jd.com/verify/image?a=1&acid=b6ff1eca-e3e5-4692-904b-be35da5f0752&uid=b6ff1eca-e3e5-4692-904b-be35da5f0752&yys=5436761901589
   ```

    过程1. requests 请求url获取一直ok,通过requests返回值result, 查看result.text发现返回的为京东首页的html网页内容,显然有误,查看返回302代码,重定向。定位问题,应该是访问url,ok.requests headers 有误。然后添加了cookie,返回200

    过程2.  返回200,查看返回数据,发现一堆乱码,以为是编码问题,打印result.encoding,返回None,应该不是编码问题。经搜索,返回如果是图片,应该是二进制数据,所以乱码。尝试保存数据到硬盘,发现验证码图片保存成功。

    过程3. 调用百度ocr接口,实现验证码识别,准确度不高,有待提高

代码地址:

```
https://github.com/wanderingpuppy/seckill
```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# JD_AutoBuy ## 京东抢购 Python爬虫自动登录京东网站,查询商品库存,价格,显示购物车详情等。 可以指定抢购商品,自动购买下单,然后手动去京东付款就行。 ## chang log + 2017-03-30 实现二维码扫码登陆 ## 运行环境 Python 2.7 ## 第三方库 - [Requests][1]: 简单好用,功能强大的Http请求库 - [beautifulsoup4][2]: HTML文档格式化及便签选择器 ## 环境配置 ``` Python pip install requests pip install beautifulsoup4 ``` ## 使用帮助 ``` cmd > python scraper-jd.py -h usage: scraper-jd.py [-h] [-u USERNAME] [-p PASSWORD] [-g GOOD] [-c COUNT] [-w WAIT] [-f] [-s] Simulate to login Jing Dong, and buy sepecified good optional arguments: -h, --help show this help message and exit -u USERNAME, --username USERNAME Jing Dong login user name -p PASSWORD, --password PASSWORD Jing Dong login user password -g GOOD, --good GOOD Jing Dong good ID -c COUNT, --count COUNT The count to buy -w WAIT, --wait WAIT Flush time interval, unit MS -f, --flush Continue flash if good out of stock -s, --submit Submit the order to Jing Dong ``` ## 实例输出 ``` cmd +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:01 2017 > 请打开京东手机客户端,准备扫码登陆: 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 201 : 二维码未扫描 ,请扫描二维码 202 : 请手机客户端确认登录 200 : BADACIFYhf6fakfHvjiYTlwGzSp4EjFATN3Xw1ePR1hITtw0 登陆成功 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:28 2017 > 商品详情 编号:3133857 库存:现货 价格:6399.00 名称:Apple iPhone 7 Plus (A1661) 128G 黑色 移动联通电信4G手机 链接:http://cart.jd.com/gate.action?pid=3133857&pcount=1&ptype=1 商品已成功加入购物车! 购买数量:3133857 > 1 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:30 2017 > 购物车明细 购买 数量 价格 总价 商品 Y 1 6399.00 6399.00 Apple iPhone 7 Plus (A1661) 128G 黑色 移动联通电信4G手机 总数: 1 总额: 6399.00 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Thu Mar 30 17:10:30 2017 > 订单详情 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ... ``` ## 注 代码仅供学习之用,京东网页不断变化,代
使用Python实现京东自动登录通常涉及网络爬虫技术和模拟浏览器操作,特别是当京东采用了验证码等防爬机制时,任务会更复杂。以下是一个简化的步骤: 1. **库准备**: - 导入必要的库,如`requests`, `BeautifulSoup`用于HTTP请求和HTML解析,`selenium`或`webdriver_manager`用于处理JavaScript渲染和浏览器操作。 ```python import requests from bs4 import BeautifulSoup from selenium import webdriver ``` 2. **获取Cookie**: - 首先需要登录京东官网,然后查看开发者工具中的Cookies信息。其中`JSESSIONID`可能是关键的登录凭证。 3. **构造登录请求**: - 如果有用户名、密码和cookie,可以尝试构建登录POST请求,并携带相关cookies。 ```python login_url = 'https://passport.jd.com/new/login.aspx' data = { 'username': 'your_username', 'password': 'your_password', # 还需要添加其他可能的表单字段,如rememberMe、captcha_code... } headers = {'Referer': login_url, 'Cookie': 'your_cookies'} with requests.Session() as s: response = s.post(login_url, data=data, headers=headers) ``` 4. **使用Selenium**(如果有验证码): - 如果网站使用了验证码,可以考虑使用Selenium启动一个实际的浏览器实例来输入验证码。例如,使用ChromeDriver: ```python options = webdriver.ChromeOptions() driver = webdriver.Chrome(options=options) driver.get(login_url) # 点击验证码图片,等待用户输入后提交 # driver.find_element_by_id('captchaImage').click() # user填写验证码后,执行submit操作 # driver.find_element_by_id('captchaCode').send_keys('your_captcha') driver.quit() ``` 5. **验证登录状态**: - 登录成功后,可以在新的页面上检查是否设置了登录后的cookie或session。 6. **后续操作**: - 现在你可以使用这个Session对象进行其他的京东网页抓取或数据交互。 注意:这只是一个基本的框架,实际情况可能会因为京东的反爬策略而变化,可能需要定期更新或处理动态加载的内容。同时,遵守京东和相关法律法规是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

youyou9526

各位看官,给点下载积分吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值