QingYi. 发表于 2021-6-29 22:54

Python & Selenium 过知乎滑动验证码

具体事项就看我这两个帖子 我就直接附上主代码了
https://www.52pojie.cn/thread-1462721-1-1.html
https://www.52pojie.cn/thread-1455857-1-1.html





说简单也不简单,说难也不难。反正花了我大把的时间在selenium的配置上面。

chrome_options = webdriver.ChromeOptions()
      chrome_options.add_argument('--disable-gpu')
      chrome_options.add_argument("--no-sandbox")
      browser = webdriver.Chrome(executable_path=r"your driver", chrome_options=chrome_options)
      # browser = webdriver.Chrome()

      try:
            # max window, because we need to slider captcha.get position
            browser.maximize_window()
      except:
            pass

      browser.get("https://www.zhihu.com/signin")

      browser.find_element_by_css_selector("div").click()
      browser.find_element_by_css_selector(".SignFlow-accountInput.Input-wrapper").send_keys("account")
      browser.find_element_by_css_selector(".SignFlow-password input").send_keys("password")
      browser.find_element_by_css_selector(".Button.SignFlow-submitButton").click()
      time.sleep(3)
      # may login failed
      login_success = False

#See the configuration in the links above
      chaojiying = Chaojiying_Client('xxxxx', 'xxx', 'xxxx')
      # get verify code
      img_href = browser.find_element_by_css_selector(".yidun_bg-img").get_attribute("src")
      slider = browser.find_element_by_xpath("/html/body/div/div/div/div/div/div/div/div")
      # get picture of gap ==> need ChaoJiYing
      img = urllib.request.urlretrieve(img_href, "code.jpg")
      im = open("code.jpg", "rb").read()
      dic = chaojiying.PostPic(im, 9101)
      # 从返回的值里面找到需要点击的下标
      # href = img.get_attribute("href")
      # 拿到验证码 上传到打码平台去识别,然后去滑动,登录成功 ok 美滋滋.

      # 从返回的值里面找到需要点击的下标
      res = dic['pic_str']
      print(res)
      # 分割 这里大家可以自己输出一下 就知道了
      # 28,110
      temp = res.split(",")
      # adjust data==> CJY return wrong dates,we should adjust it.According to official documents
      # 9101         坐标选一,返回格式:x,y         15
      # x = int(temp) - 10
      x = int(temp) - 15
      y = int(temp)
      print("x is {}, y is {}".format(x, y))
      # 移动到某个区域 然后再进行点击
      # 然后找到区域 进行偏移
      # 是事件链
      # print("接下来的事件")
      # 按住不释放 ==> 拖动
      ActionChains(browser).click_and_hold(slider).perform()
      # only xoffset
      ActionChains(browser).move_by_offset(xoffset=x, yoffset=0).perform()
      time.sleep(2)
      # 释放 即可登录成功
      ActionChains(browser).release().perform()






      time.sleep(10)
      # while not login_success:
      #   try:
      #         notify_ele = browser.find_element_by_css_selector(".AppHeader-userInfo")
      #         login_success = True
      #   except:
      #         pass
      browser.close()

钱多多28 发表于 2021-6-29 23:43

還以為是用OpenCV,....原來接入打碼平臺

jjl 发表于 2021-6-30 00:00

学习了,感谢分享

i9420 发表于 2021-6-30 07:22

模拟器是很好。成功率较高。就是这个速度太慢了。还不可以多线程。

lfm333 发表于 2021-6-30 07:43

感谢分享

神、Dawn 发表于 2021-6-30 07:54

用的哪个打码平台{:1_918:}

QingYi. 发表于 2021-6-30 09:05

钱多多28 发表于 2021-6-29 23:43
還以為是用OpenCV,....原來接入打碼平臺

这个之后我会去学习

QingYi. 发表于 2021-6-30 09:06

i9420 发表于 2021-6-30 07:22
模拟器是很好。成功率较高。就是这个速度太慢了。还不可以多线程。

没太懂验证码怎么多线程,去提取多张验证码多线程去处理吗

jjingtian 发表于 2021-6-30 09:40

QingYi. 发表于 2021-6-30 09:06
没太懂验证码怎么多线程,去提取多张验证码多线程去处理吗

他的意思应该是开多个模拟器……
页: [1]
查看完整版本: Python & Selenium 过知乎滑动验证码