通过控制鼠标键盘直接从浏览器中爬取
由于初学,未找到requests和selenium绕过反爬的解决方法(主要过不了拖动验证),通过制作类似按键精灵的方法启动自有浏览器(安全通过拖动验证),然后从浏览器开发模式的response复制出需要的信息。可根据自己浏览器将鼠标点击的坐标重新设置后使用,注意在点击搜索或者搜索结果等多种清空均可能出现需要拖动的时候,可多加入一些拖动避免操作异常,效率比较低,好在可以使用。
from pynput import keyboard
from pynput import mouse
import time
import win32api
import win32clipboard as w
import win32con
import json
import math
class controlMouseAndKeyboard:
def __init__(self):
self.m = mouse.Controller()
self.kb = keyboard.Controller()
# 两种启动本地浏览器的方法
def start_amap(self):
win32api.ShellExecute(0, 'open', r'C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe', '', '', 4)
# self.app = win32process.CreateProcess(r'C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe', '', None, None, 0, win32process.NORMAL_PRIORITY_CLASS, None, None, win32process.STARTUPINFO())
time.sleep(2)
self.kb.type('ditu.amap.com')
time.sleep(2)
self.kb.press(keyboard.Key.enter)
time.sleep(2)
#鼠标左击
def left_click(self, x, y):
self.m.position = (x, y)
self.m.click(mouse.Button.left, 1)
time.sleep(2)
#鼠标右击
def right_click(self, x, y):
self.m.position = (x, y)
self.m.click(mouse.Button.right, 1)
time.sleep(2)
#鼠标左键按住拖动
def drag_left(self, x1, y1, x2, y2):
self.m.position = (x1, y1)
time.sleep(1)
self.m.press(mouse.Button.left)
time.sleep(1)
self.m.position = (x2, y2)
time.sleep(1)
self.m.release(mouse.Button.left)
time.sleep(1)
# ctrl+c 复制到剪切板
def copy_all(self):
with self.kb.pressed(keyboard.Key.ctrl):
self.kb.press('a')
time.sleep(0.5)
self.kb.release('a')
time.sleep(1)
with self.kb.pressed(keyboard.Key.ctrl):
self.kb.press('c')
time.sleep(0.5)
self.kb.release('c')
#读取剪切版内容
def gettext(self):
w.OpenClipboard()
t = w.Ge