这是网站:http://wsjs.saic.gov.cn 默认语言是中文,无论如何都可以将其设置为英语。 他们加密了他们的js我使用chrome来获得一些我认为与阻止机器人的功能相关的关键字。 我的代码是:
# -*- coding: utf-8 -*-
import sys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time
import requests
reload(sys)
sys.setdefaultencoding('utf-8')
headers = { 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language':'en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zh-TW;q=0.2,ru;q=0.2',
'Accept-Encoding':'gzip, deflate',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0'
}
for key, value in headers.iteritems():
webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.{}'.format(key)] = value
webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.settings.userAgent'] = 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:47.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36'
print 'yeah'
url = 'http://wsjs.saic.gov.cn/'
driver = webdriver.PhantomJS()
driver.get(url)
driver.maximize_window()
time.sleep(5)
driver.save_screenshot('fk1.png')
我使用chrome debug在js文件中成功获取了所有这些关键字。
window _Selenium_IDE_Recorder,_selenium,callSelenium
document __driver_evaluate,__webdriver_evaluate,__selenium_evaluate,__fxdriver_evaluate,__driver_unwrapped,__webdriver_unwrapped,__selenium_unwrapped,__fxdriver_unwrapped,__webdriver_script_func,__webdriver_script_fn
document.documentElement.getAttribute ["selenium", "webdriver", "driver"]
window callPhantom,_phantom
现在我需要知道如何逃脱它。我是否需要重新编译phantomjs以使我的脚本正常工作?
Upate: 正常人没有回答我的问题,我必须独自完成这个问题。我发现callPhantom _Phantom是暴露的两个apis,而不是网站可以调用,所以他们知道。并且没有page.onInitialized api to selenium所以我不得不使用没有webdriver的phantomjs,我设法进入页面并开始在网页上输入一些信息。
然后我意识到还有另一个问题。他们还检查鼠标移动以检测您是否是机器人。 以下是他们检查的一些关键字:
mousemove`mousedown`mouseup`mouseover`mouseout`keydown`keyCode
我不知道怎么回事,因为我几乎不懂JS。我如何通过此检测。我还注意到有一些关键词,例如' abort diSpatEvent'。