目标:使用浏览器全自动的访问简书的简书电影板块内容
环境: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() #关闭浏览器