本期主要是介绍一下利用vps拨号的方法去运行用户点击行为,俗称seo模拟快排,那么顾名思义,快排的运行方式需要在一台拨号服务器上进行,本次模拟快排的代码是采用python中的pyppeteer库,这个库运行自动化浏览器,比较顺畅且快速。
运行逻辑
每次运行一次点击后,自动重新拨号一次,然后再重新打开浏览器进行下一个关键词的运行点击,关键词使用数据库轮询方式,每次点击一个关键词后,自动切换下一个关键词
async def connect(self, name, username, password): '''ADSL拨号连接''' cmd_str = "rasdial %s %s %s" % (name, username, password) os.system(cmd_str) await asyncio.sleep(random.choice(range(1,4))) print("ADSL拨号成功")async def disconnect(self, name): '''ADSL断开连接''' cmd_str = "rasdial %s /disconnect" % name os.system(cmd_str) await asyncio.sleep(random.choice(range(1,4))) print("ADSL拨号断开") async def getKeyword(self): try: while True: sql = 'select keywords,mode,web_name,web_url,click_now_count,click_ready_count from seo_kuaipai limit %s,%s' % ( (self.pn - 1), 1) self.cur.execute(sql) info = self.cur.fetchone() self.keyword = info[0] self.mode = info[1] self.web_name = info[2] self.web_url = info[3] self.click_now_count = int(info[4] if info[4] else 0) self.click_ready_count = int(info[5] if info[5] else 10) if self.click_now_count > self.click_ready_count: self.pn += 1 else: logger.info(f'正在优化的关键词是{self.keyword}') break except TypeError: logger.error('关键词已经全部点完') return True
在某度输入关键词后以及点击轨迹也做了一定的处理,其目的是为了规避机器点击,真实的模拟真人点击。
点击元素上,做了随机选取元素的坐标位置,然后进行鼠标的移动点击。
async def btn_element_position(self): element = await self.page.evaluate(''' () =>{ return { x: document.querySelector('#su').getBoundingClientRect().x, y: document.querySelector('#su').getBoundingClientRect().y, width: document.querySelector('#su').getBoundingClientRect().width, height: document.querySelector('#su').getBoundingClientRect().height }} ''') x = element['x'] + random.choice(range(1, int(element['width']) + 1)) y = element['y'] + random.choice(range(1, int(element['height']) + 1)) await self.mousemove_click(x,y)
消除浏览器指纹特征
代码里通过对浏览器的header头进行了处理,包括(随机UA,随机cookie、随机分辨率)、以及浏览器的启动特征webdriver进行屏蔽,屏蔽webdriver用到了pyppeteer-stealth库,这个库是puppeteer-extra-plugin-stealth的Python移植版,可以有效的防止机器人检测
await stealth(self.page) #消除浏览器特征 await self.page.authenticate({'username': '649307714', 'password': 'a2063ror'}) #设置浏览器uaawait self.page.setUserAgent(await self.rand_ua()) #设置浏览器大小await self.page.setViewport({'width':self.rand_fbl["width"]-16,'height':self.rand_fbl["height"]-60}) #设置浏览器cookieasync def add_Cookies(self): with open('common/cookies.txt','r',encoding='utf-8') as f: cookies_list = f.read().splitlines() # 50%实用百度cookies rand_cookies = random.choice(cookies_list).split('=') if random.choice(range(0, 2)) == 0: logger.info(f'本次使用cookies为{rand_cookies}') await self.page.setCookie({'name':rand_cookies[0],'value':rand_cookies[1],'domain':'www.baidu.com'}) else: logger.info('本次不使用cookies')
清除缓存文件
清除缓存文件,可以每次运行浏览器模拟的时候,可以将本地缓存给清理掉,让每次启动浏览器的时候都是无缓存的状态,而且也会释放本地内存,不会造成卡顿。
这就是用python实现模拟快排整体思路了,当然还有更多的优化措施可以进一步的优化,现在可以在vps服务器里顺畅的运行了。此次我也将代码进行封装了。大家在购买这款模拟快排软件不需要安装python环境,就可以运行了。