justcode.ikeepstudying.com
python: selenium获取验证码, selenium-webdriver 登录验证码的处理, Selenium获取验证码并识别,图片验证码反爬解决思路 - Just Code
获取验证码有两种思路: 1.获取页面源代码,提取验证码图片 2.利用selenium截取页面,定位验证码元素的位置,利用Image进行处理,获取其中验证码部分 下面进行解析: 1.获取页面源代码,提取验证码图片 如何获取源代码并提取验证码图片过程就不在分析了,既然看到这篇文章,相信这些工作都不在话下了。 这里只分析一下缺点:当提取验证码url后发现每次打开该验证码图片,其内容不断变化, 以搜狗验证码为例:http://weixin.sogou.com/antispider/util/seccode.php?tc=1486691901,该验证码是单独加载进页面,而非嵌入,这时候,单纯提取验证码url会发现当前验证码和提取验证码地址打开的内容不一样。这时候,我们需要一个更方便简单的方法。 2.利用selenium截取页面 selenium.webdriver 内置了截取当前页面的功能,其中: a.WebDriver.Chrome自带的方法只能对当前窗口截屏,若是需要截取的窗口超过了一屏,就只能另辟蹊径了。 b.WebDriver.PhantomJS自带的方法支持对整个网页截屏。 在这里,我们利用两种方法均可,因为验证码界面通常比较简单。 结果如图: #打开验证码界面 driver = webdriver.Chrome() url = "http://weixin.sogou.com/antispider/?from=%2fweixinwap%3Fpage%3d2%26_rtype%3djson%26ie%3dutf8%26type%3d2%26query%3d%E6%91%A9%E6%8B%9C%E5%8D%95%E8%BD%A6%26pg%3dwebSearchList%26_sug_%3dn%26_sug_type_%3d%26" driver.set_window_size(1200, 800) cookies = driver.get_cookies() #处理cookies driver.get(url) for k,v in cookies.iteritems(): cookie_dict ={'name':k,'value':v} driver.add_cookie(cookie_dict) driver.get(url) #获取截图 driver.get_screenshot_as_file('CrawlResult/screenshot.png') #获取指定元素位置 element = driver.find_element_by_id('seccodeImage') left = int(element.location['x']) top = int(element.location['y']) right = int(element.location['x'] …