爬虫之使用浏览器全自动访问简书的简书电影板块内容

6 篇文章 1 订阅
1 篇文章 0 订阅

目标:使用浏览器全自动的访问简书的简书电影板块内容

环境:python3.65     pycharm编译环境    谷歌浏览器

思路:

       1.首先使用selenium模块打开谷歌浏览器并使用百度搜索“简书”,得到如图一所示的图片,网上这一步讲解很多并且很详细,我就不在此处详细讲解了。代码奉上。

                                                                                     图一

from selenium import webdriver
from selenium.webdriver.common.by import By   #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys   #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait  #等待页面加载某些元素

browser = webdriver.Chrome("D:\software(sth)\Google\Chrome\Application\chromedriver.exe")#初始化浏览器
browser.get('https://www.baidu.com')     #get()方法请求URL:百度
input = browser.find_element_by_id('kw')   #寻找‘kw’节点
input.send_keys('简书')        #输入关键字
input.send_keys(Keys.ENTER)    #按下回车键
wait = WebDriverWait(browser, 20)    #浏览器等待20ms
wait.until(EC.presence_of_element_located((By.ID,'content_left')))  #等到id为content_left的元素加载完毕,最多等20秒

       2.打开简书的官网,在此处打开的方式是通过先测量好官网在图片中的位置,然后利用方法pyautogui.moveTo()将鼠标移动过去,再使用方法pyautogui.doubleClick()打开官网,这种方式比较死板。第三步使用新的方法,代码如下:

pyautogui.moveTo(213,282,duration=0.25)    #测量好的坐标位置
time.sleep(1)
pyautogui.doubleClick()   #双击鼠标右键
print("页面已打开!")

效果如图二所示:

                       

                                                                                        图二

实时获取屏幕上某位置的坐标代码如下:

import os,time
import pyautogui as pag
try:
    while True:
            print("Press Ctrl-C to end")
            x,y = pag.position() #返回鼠标的坐标
            posStr="Position:"+str(x).rjust(4)+','+str(y).rjust(4)
            print(posStr)#打印坐标
            time.sleep(0.2)
            os.system('cls')#清楚屏幕
except  KeyboardInterrupt:
    print( 'end....')

       3.主要思路:获取到图二中“简书电影”的位置,返回其坐标,将鼠标移动过去,双击就可打开此版块了。最大的问题:

如何获取“简书电影”的位置?

       我主要使用的方法是图片匹配法,首先简单讲解一下图片匹配法,主要使用aircv模块,首先找到一张原图片,然后再找一张要匹配的图片,将两张图片使用方法ac.find_template()进行匹配,这个方法将会返回图片的中心位置坐标,以及四个点的坐标。

例:原图的名称:jianshu.jpg   匹配图的名称:jiantu.jpg  

import aircv as ac

imsrc = ac.imread(r'D:\Python\python_exmple\pachong05\jianshu.jpg')
imobj = ac.imread(r'D:\Python\python_exmple\pachong05\jiantu.jpg')
match_result = ac.find_template(imsrc, imobj, 0.5)
try:
    print(match_result)
except TypeError:
    print("匹配失败!!!")

输出的结果如下:

在此处我们只需要获取图片的中心位置即可,将中心位置的坐标传给鼠标移动函数,然后双击此位置就可达成目标。如果大家有更好获取查询某段文字方法,请不吝赐教。也请大家多多指教文章中的不足之处,谢谢!

作者自己的写的源码,有些不大规范,请多多包涵。附上源码:

from selenium import webdriver
from selenium.webdriver.common.by import By   #按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys   #键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait  #等待页面加载某些元素
import pyautogui       #鼠标操作
from bs4 import BeautifulSoup
import time
from PIL import ImageGrab     #截图操作
from PIL import Image
import aircv as ac      #图像匹配模块

#截取原图
def jieping():
    size = (0,0,1600,900)
    img = ImageGrab.grab(size)
    img.save('jianshu.jpg')

#匹配图片,获取坐标
def complice():
    imsrc = ac.imread(r'D:\Python\python_exmple\pachong05\jianshu.jpg')
    imobj = ac.imread(r'D:\Python\python_exmple\pachong05\jiantu.jpg')
    match_result = ac.find_template(imsrc, imobj, 0.5)
    try:
        return match_result['result']
    except TypeError:
        print("匹配失败!!!")
        return None

browser = webdriver.Chrome("D:\software(sth)\Google\Chrome\Application\chromedriver.exe")#初始化浏览器
browser.get('https://www.baidu.com')     #get()方法请求URL:百度
input = browser.find_element_by_id('kw')   #寻找‘kw’节点
input.send_keys('简书')        #输入关键字
input.send_keys(Keys.ENTER)    #按下回车键
wait = WebDriverWait(browser, 20)    #浏览器等待20ms
wait.until(EC.presence_of_element_located((By.ID,'content_left')))  #等到id为content_left的元素加载完毕,最多等20秒
pyautogui.moveTo(213,282,duration=0.25)    #移动鼠标
time.sleep(1)
pyautogui.doubleClick()   #双击鼠标右键
print("页面已打开!")
browser.maximize_window()  #浏览器窗口最大化
time.sleep(10)
jieping()     #截取原图
time.sleep(10)
distication = complice()     #获取坐标
print(distication)
time.sleep(1)
pyautogui.moveTo(distication[0],distication[1],duration=0.25)   #移动鼠标
time.sleep(3)
pyautogui.doubleClick()   #双击鼠标右键
time.sleep(99999)
browser.quit()    #关闭浏览器


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

远去的星光

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值