目录
上一篇文章
本章内容
主要讲的是上一章的代码实现
导入所需要的程序包
python
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import json
设置浏览器为运行结束后不关闭(可选)
之后先设置自己想要搜索的内容,并且把浏览器设置为允许结束后不关闭,并且打开要爬取的咸鱼网站(可设可不设)
python
input_1=input('输入想要搜索的内容:')
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
# 注意此处添加了chrome_options参数
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')
定位到搜索框的xpath地址
python
driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')
执行动作
执行动作(调用鼠标api点击刚刚定位的搜索框,然后输入input_1的值并且回车
python
ActionChains(driver) \
.move_to_element(driver_1) \
.click_and_hold() \
.pause(1) \
.send_keys(input_1) \
.key_down(Keys.ENTER)\
.perform()
time.sleep(1)
中间的.pause(1)以及time.sleep(1)是等待一秒钟的时间(保险起见,怕网页没有加载好,或者你设置一个selenium等待函数更保险)
获取cookie
接下来就是获取cookie,获取cookie方法上一章讲了
在你的浏览器上,下载cookie editor插件登录,不要用运行python时跳出的浏览器,正常打开浏览器(这样不会跳验证码。。。即使跳了也可以手动成功过),导出你的cookie
保存为json文件
然后新建一个json格式的文件并且把它命名为cookie.json
修改cookie的sameSite值并且导入cookie
导入cookie(出错)
python
cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:
driver.add_cookie(cookie)
但是!!!!
前面讲过直接导入会报错
bash
assert cookie_dict['sameSite'] in ['Strict', 'Lax'] AssertionError()
由于这里语法规定sameSite必须为'Strict', 'Lax'两个之一,不然就报错
所以我们要遍历字典,并且把字典中的sameSite设置为Strict
导入cookie(修改后)
所以代码改为
python
cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:
if'sameSite' in cookie:
cookie['sameSite'] = 'Strict'
driver.add_cookie(cookie)
driver.refresh()
注意,导入cookie后要用driver.refresh()刷新
打印源代码
然后打印网页的源代码,注意要等3秒加载元素(或者用re库带的筛选,筛选你想要的的元素,比如商品链接,价格,以及介绍)
python
time.sleep(3)
print(driver.page_source)
最后出现页面
需要注意的问题
- 首先要说的是这个通过python不如通过app抓包来的稳定
- 页面中你登录的cookie的失效时间是不确定的,所以你可能需要经常更新cookie(看个人情况)
- 无法频繁(比如5分钟一次)搜索,否则会跳滑块验证,或者你有多个账号也可以搞(大概也就这个流程)
- 写出来的代码只是提取出来网页源代码------其实都提取出网页源代码了,使用就只有一个筛选了(csdn上有大把的优质博主和大佬教你通过源代码过滤有用的信息)
- 当然如果需要的话我可以再水一篇博客
- 它理论上可以关联到钉钉机器人或者是QQ机器人上实现定时推送咸鱼信息(啊?你问我为什么不继续写?因为还没学,不然这期标题末尾就不是(2/2)而是(2/3)了;咳咳咳...u1s1,钉钉应该是有教程教的,傻妞机器人应该也可以执行python脚本的,"按理"来说不会很难实现,实在不行我再去学吧(累die...)
所有代码
所有代码附上吧
python
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import time
import json
input_1=input('输入想要搜索的内容:')
# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)
# 注意此处添加了chrome_options参数
driver = webdriver.Chrome(chrome_options=option)
driver.get('https://h5.m.goofish.com/app/idleFish-F2e/fish-mini-pha/search.html?spm=a2170.tb_mini_index.0.0')
driver_1=driver.find_element(by='xpath',value='/html/body/div/div/div[1]/input')
ActionChains(driver) \
.move_to_element(driver_1) \
.click_and_hold() \
.pause(1) \
.send_keys(input_1) \
.key_down(Keys.ENTER)\
.perform()
time.sleep(1)
cookies=json.load(open('cookie.json', 'r'))
for cookie in cookies:
if'sameSite' in cookie:
cookie['sameSite'] = 'Strict'
driver.add_cookie(cookie)
driver.refresh()
time.sleep(3)
print(driver.page_source)
总结
这些代码搞得我晕头转向的,尤其是那个内嵌的登录页面让我走了很多弯路,但是对于这个库的学习应该也算是初窥门径吧,如果有大佬有优化的地方欢迎指出(真的没学多深,很容易出错的)