参考github-zheye编写好的程序
程序环境:python3.6+tensorflow1.5
python3.7+tensorflow2.2如果用于老式机器,会一直失败,请注意,降级到3.6+1.5
知乎会识别chromedriver里面的关键字,从而禁止我们访问,我们可以加入以下代码规避检测
chrome_option = Options()
chrome_option.add_argument("--disable-extensions")
chrome_option.add_experimental_option("excludeSwitches",['enable-automation'])
chrome_option.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
知乎识别汉字倒立文字
def deal_with_chinese_captcha(self, Captcha_chineseImg):
"""
deal with chinese captcha
:param chinese_captcha_element:
:return:
"""
ele_position = Captcha_chineseImg.location
x_relative = ele_position["x"]
y_relative = ele_position["y"]
browser_navigation_panel_height = self.browser.execute_script(
'return window.outerHeight - window.innerHeight;')
base64_text = Captcha_chineseImg.get_attribute("src")
# 这里需要注意这个OA
code = base64_text.replace('data:image/jpg;base64,', '').replace("%0A", "")
# print code
fh = open("yzm_cn.jpeg", "wb")
fh.write(base64.b64decode(code))
fh.close()
# 识别汉字坐标,关键代码
z = zheye()
positions = z.Recognize('yzm_cn.jpeg')
last_position = []
if len(positions) == 2:
if positions[0][1] > positions[1][1]:
last_position.append([positions[1][1], positions[1][0]])
last_position.append([positions[0][1], positions[0][0]])
else:
last_position.append([positions[0][1], positions[0][0]])
last_position.append([positions[1][1], positions[1][0]])
# 获取坐标,这里因为实际显示的文字比生成的文字小,是1:2的关系,所以还原
first_position = [int(last_position[0][0] / 2), int(last_position[0][1] / 2)]
second_position = [int(last_position[1][0] / 2), int(last_position[1][1] / 2)]
# 点击第一个汉字,这里x_relative是图片位置,后面是汉字坐标
# y_relative是图片但是要加上浏览器地址栏坐标+汉字纵坐标
move(x_relative + first_position[0],
y_relative + browser_navigation_panel_height + first_position[1])
click()
# 点击第二个汉字
time.sleep(1)
move(x_relative + second_position[0],
y_relative + browser_navigation_panel_height + second_position[1])
click()
else:
last_position.append([positions[0][1], positions[0][0]])
first_position = [int(last_position[0][0] / 2), int(last_position[0][1] / 2)]
move(x_relative + first_position[0],
y_relative + browser_navigation_panel_height + first_position[1])
click()
# 输入验证码后继续登录
self.browser.find_element_by_name("username").send_keys(Keys.CONTROL + "a")
self.browser.find_element_by_name("username").send_keys(ZHIHU_USER)
time.sleep(2)
self.browser.find_element_by_name("password").send_keys(Keys.CONTROL + "a")
self.browser.find_element_by_name("password").send_keys(ZHIHU_PWD)
time.sleep(2)
self.browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[1]/div/form/button').click()
if self.check_login():
login_success = True