爬虫学习
首先分析爬取的页面,地址栏可以直接 GET 提交拿到想要的内容,免去了还要操作下拉框。(完整代码在文章最下面)
-
根据id直接使用 driver.find_element_by_id() 方法获取输入框
print('输入内容') username_input = driver.find_element_by_id('inputvalue') # 获取输入框对象 username_input.send_keys('xxxxxxxxx') # 设置值
-
根据id直接使用 driver.find_element_by_id() 方法获取按钮
commit_btn = driver.find_element_by_id('submit_buy') # 获取提交按钮 commit_btn.click() # 点击
-
处理验证码,验证码加载可能会有点慢,需要等待一下。
time.sleep(4) # 等一会,等待加载完毕 print('验证码点击') code_btn = driver.find_element_by_xpath('//div[@class="geetest_radar_tip"][1]') # ActionChains(driver).move_to_element(code_btn).click().perform() # 验证码点击 time.sleep(1)
-
滑动验证码出现,由于现在无法通过canvas直接截图获取,所以我打算改变css样式的display属性来截取整个页面,最后用截图下来的两张图来进行对比。
# 设置display 先全部隐藏掉 # 完整图 geetest_canvas_fullbg geetest_fade geetest_absolute js_wan = 'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="none"' driver.execute_script(js_wan) # 残缺 geetest_canvas_bg geetest_absolute js_wan = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="none"' driver.execute_script(js_wan) # 小块 geetest_canvas_slice geetest_absolute js_wan = 'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="none"' driver.execute_script(js_wan) # 单独显示截图 # 完整图 geetest_canvas_fullbg geetest_fade geetest_absolute js_wan = 'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="inline"' driver.execute_script(js_wan) driver.save_screenshot("wan.png") # 得到完整的图 js_wan = 'document.getElementsByClassName("geetest_canvas_fullbg geetest_fade geetest_absolute")[0].style.display="none"' driver.execute_script(js_wan) # 隐藏 time.sleep(1) # 残缺 geetest_canvas_bg geetest_absolute js_can = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="inline"' driver.execute_script(js_can) driver.save_screenshot("can.png") # 得到残缺的图 js_can = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="none"' driver.execute_script(js_can) # 小块图 残缺图 出现 方便观看是否到点 js_wan = 'document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].style.display="inline"' driver.execute_script(js_wan) js_wan = 'document.getElementsByClassName("geetest_canvas_slice geetest_absolute")[0].style.display="inline"' driver.execute_script(js_wan)
得到如下两张图,分别是完整图和缺口图。
- 完整图如下
- 残缺图如下
-
将两张图进行对比,输出有差异的坐标
# 判断位置 def matchAB(fileA, fileB): # 读取图像数据 imgA = cv2.imread(fileA) imgB