百度自动登录:

 1 from selenium import webdriver
 2 import time
 3 
 4 # 1.使用谷歌浏览器访问百度首页
 5 bro = webdriver.Chrome()
 6 bro.get('https://www.baidu.com/')
 7 # 2.查找页面上的登录按钮
 8 login_tag = bro.find_element_by_id('s-top-loginbtn')
 9 # 3.点击登录按钮
10 time.sleep(0.5)
11 login_tag.click()
12 '''延迟等待:页面数据有时候需要时间加载 但是代码不会自动等'''
13 time.sleep(3)
14 # 4.查找点击短信登录按钮
15 message_tag = bro.find_element_by_id('TANGRAM__PSP_11__changeSmsCodeItem')
16 message_tag.click()
17 time.sleep(0.5)
18 # 5.查找手机号输入框并填写内容
19 phone_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsPhone')
20 phone_tag.send_keys(18818188888)
21 time.sleep(0.5)
22 # 6.查找发送验证码按钮并点击
23 btn_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsTimer')
24 btn_tag.click()
25 time.sleep(0.5)
26 # 7.查找并点击登录按钮
27 submit_tag = bro.find_element_by_id('TANGRAM__PSP_11__smsSubmit')
28 submit_tag.click()
29 time.sleep(0.5)
30 
31 bro.close()

延时等待:

有时候我们在访问网站数据的时候 加载需要一定的时间 没有加载完全的情况下代码极其容易报错 此时需要我们的等待页面数据加载完毕 如何精确等待?

bro.implicitly_wait(10)

爬取京东商品数据:

1.商品数据的展示页存在动态加载的情况 需要往下滚动

window.document.body.scrollHeight # 当前页面屏幕高度

window.scrollTo # 滚动到指定位置

2.针对图片数据存在懒加载现象

3.多页数据的爬取

由于我们使用的是selenuim所以此处只需要查找下一页按钮点击即可

将单页爬取数据的代码封装成一个函数 之后就可以循环爬取多页

4.数据的持久化

 1 import time
 2 from selenium import webdriver
 3 from selenium.webdriver.common.keys import Keys
 4 
 5 bro = webdriver.Chrome()
 6 # 1.访问京东首页
 7 bro.get('https://www.jd.com/')
 8 bro.implicitly_wait(10)  # 延时等待
 9 # 2.查找搜索款并输入商品名称
10 search_input = bro.find_element_by_id('key')
11 search_input.send_keys('显卡')
12 # 3.按下enter键进入商品展示页
13 search_input.send_keys(Keys.ENTER)
14 
15 # 由于数据存在滚动加载的现象
16 for i in range(0, 8000, 1000):  # 千万不能直接到底 一定要有一个波段
17     bro.execute_script('window.scrollTo(0,%s)' % i)
18     time.sleep(0.5)
19 
20 good_list = bro.find_elements_by_css_selector('li.gl-item')
21 # 循环获取每一个li标签 筛选所需数据
22 for li in good_list:
23     # 图标标签的src属性
24     img_tag = li.find_element_by_css_selector('div.p-img a img')
25     img_src = img_tag.get_attribute('src')
26     '''img标签的src属性存在懒加载现象 src没有就在data-lazy-img属性下'''
27     if not img_src:
28         img_src = 'https:' + img_tag.get_attribute('data-lazy-img')
29     # 商品价格
30     price_tag = li.find_element_by_css_selector('div.p-price strong')
31     order_price = price_tag.text
32     # 商品描述
33     desc_tag = li.find_element_by_css_selector('div.p-name a em')
34     order_desc = desc_tag.text
35     # 商品链接
36     link_tag = li.find_element_by_css_selector('div.p-name a')
37     order_link = link_tag.get_attribute('href')
38     # 商品销量
39     commit_tag = li.find_element_by_css_selector('div.p-commit strong a')
40     order_commit = commit_tag.text
41     # 店铺名称
42     shop_tag = li.find_element_by_css_selector('div.p-shop span a')
43     shop_name = shop_tag.text
44     # 店铺链接
45     shop_link = shop_tag.get_attribute('href')
46     # 通过打印展示数据 也可以数据持久化到表格文件
47     print("""
48     商品描述:%s
49     商品价格:%s
50     商品图片:%s
51     商品链接:%s
52     店铺名称:%s
53     店铺链接:%s
54     """ % (order_desc, order_price, img_src, order_link, shop_name, shop_link))
55 
56 bro.close()

知乎登录案例:

1.电脑端知乎不登陆是无法直接访问首页的
2.network监控发送登录请求体数据为加密
加密的代码关键字:encrypt
解密的代码关键字:decrypt
3.搜索关键字encrypt通过断点调试查看到内部真实数据
client_id=c3cef7c66a1843f8b3a9e6a1e3160e20&grant_type=password&timestamp=1566371889615&source=com.zhihu.web&signature=849409fe69f76b28a7ebfa95f0acc784d7c812bf&username=+8618896530856&password=dadasdasdas&captcha=nngt&lang=en&utm_source=&ref_source=other_https://www.zhihu.com/signin?next=%2F