Không thể nhấn vào nút Login ẩn khi viết chương trình tự động với Selenium và Python

Mình thử viết chương trình tự động đăng nhập https://faucetcrypto.com/login

Mình có một vấn đề là nút Login bị ẩn và thường phải nhấn vào đó để giải Recaptcha, nếu vượt qua thì sẽ hiện sáng nút Login để nhấn nhưng trong trường hợp này mình dùng giải Captcha tự động bởi Capmonter và thực thi điền Captcha bằng token.

Mình không biết làm thế để nhấn vào nút Login ẩn.Anh chị em nào biết thì giúp mình nhé !
Thanks

Mã nguồn :

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import requests
import getpass
import json

import os

MyEmail = "[email protected]"
MyPassword = "xxxxxx"

chromeOption = webdriver.ChromeOptions()
chromeOption.add_experimental_option("excludeSwitches", ["enable-automation"])
chromeOption.add_experimental_option('useAutomationExtension', False)
chromeOption.add_argument("--disable-notifications")
chromeOption.add_argument('--disable-blink-features=AutomationControlled')

browser = webdriver.Chrome(executable_path="C:\\chromedriver",chrome_options=chromeOption)
browser.get("https://faucetcrypto.com/login")
Fill_Email = browser.find_element_by_xpath("//div//input[@type='email']")
Fill_Email.send_keys(MyEmail)

Fill_Pass = browser.find_element_by_xpath("//div//input[@type='password']")
Fill_Pass.send_keys(MyPassword)

capmonster_key="xxxxxxxxxxx"
current_url=browser.current_url
recaptcha_key="6LdMWVMUAAAAAEJEZEfFAxCbptz02TZPzZtMfNQF"

url ="http://api.capmonster.cloud/in.php?key="+capmonster_key+"&method=userrecaptcha&googlekey="+recaptcha_key+"&pageurl="+current_url



resp = requests.get(url)

if resp.text[0:2] != 'OK' :
	quit('Error. Captcha is not received')
captcha_id = resp.text[3:]


fetch_url = "http://api.capmonster.cloud/res.php?key="+capmonster_key+"&action=get&id=" + captcha_id

for i in range(1, 20):
    time.sleep(5) # wait 5 sec.
    resp = requests.get(fetch_url)
    if resp.text[0:2] == 'OK':
       break

browser.execute_script("""
  document.getElementById("g-recaptcha-response").innerHTML = arguments[0]
""", resp.text[3:])

print("In ra Token")
print(resp.text[3:])

Press_Login=browser.find_element_by_xpath("//*[contains(text(),'Login')]")
Press_Login.click()

time.sleep(100000)

@Kulteam sau khi có kết quả recaptcha thì cần notify cho client biết để update state nút login. Nếu không thì nút login sẽ không thể click được. Để inject event thủ công thì bạn sử dụng function sau.

___grecaptcha_cfg.clients[0].D.D.callback("captcha response token");

Lưu ý, đoạn code trên chỉ đúng với version hiện tại của recaptcha, do đó đoạn code trên có thể chết bất kì lúc nào nếu google update

4 Likes

@qloved Mình đã thử thêm dòng sau :

browser.execute_script("""
  ___grecaptcha_cfg.clients[0].D.D.callback('arguments[0]')
""", resp.text[3:])

và nó hiện lỗi :

Full mã nguồn :

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import requests
import getpass
import json
import os
MyEmail = "[email protected]"
MyPassword = "xxxxxxxx"
capmonster_key="xxxxxxxxxx"
recaptcha_key="6LdMWVMUAAAAAEJEZEfFAxCbptz02TZPzZtMfNQF"
chromeOption = webdriver.ChromeOptions()
chromeOption.add_experimental_option("excludeSwitches", ["enable-automation"])
chromeOption.add_experimental_option('useAutomationExtension', False)
chromeOption.add_argument("--disable-notifications")
chromeOption.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(executable_path="C:\\chromedriver",chrome_options=chromeOption)
browser.get("https://faucetcrypto.com/login")
current_url=browser.current_url
Fill_Email = browser.find_element_by_xpath("//div//input[@type='email']")
Fill_Email.send_keys(MyEmail)
Fill_Pass = browser.find_element_by_xpath("//div//input[@type='password']")
Fill_Pass.send_keys(MyPassword)
url ="http://api.capmonster.cloud/in.php?key="+capmonster_key+"&method=userrecaptcha&googlekey="+recaptcha_key+"&pageurl="+current_url
resp = requests.get(url)
if resp.text[0:2] != 'OK' :
  quit('Error. Captcha is not received')
captcha_id = resp.text[3:]
fetch_url = "http://api.capmonster.cloud/res.php?key="+capmonster_key+"&action=get&id=" + captcha_id
for i in range(1, 20):
    time.sleep(5) # wait 5 sec.
    resp = requests.get(fetch_url)
    if resp.text[0:2] == 'OK':
       break
browser.execute_script("""
  document.getElementById("g-recaptcha-response").innerHTML = arguments[0]
""", resp.text[3:])
time.sleep(3)
browser.execute_script("""
  ___grecaptcha_cfg.clients[0].D.D.callback('arguments[0]')
""", resp.text[3:])
print("In ra Token")
print(resp.text[3:])
Press_Login=browser.find_element_by_xpath("//*[contains(text(),'Login')]")
Press_Login.click()
time.sleep(100000)

Thanks

Đã fix xong …Full code :slight_smile:

 from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import requests
import getpass
import json
import os
MyEmail = "[email protected]"
MyPassword = "xxxxxxxx"
capmonster_key="xxxxxxxxxx"
recaptcha_key="6LdMWVMUAAAAAEJEZEfFAxCbptz02TZPzZtMfNQF"
chromeOption = webdriver.ChromeOptions()
chromeOption.add_experimental_option("excludeSwitches", ["enable-automation"])
chromeOption.add_experimental_option('useAutomationExtension', False)
chromeOption.add_argument("--disable-notifications")
chromeOption.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(executable_path="C:\\chromedriver",chrome_options=chromeOption)
browser.get("https://faucetcrypto.com/login")
current_url=browser.current_url
Fill_Email = browser.find_element_by_xpath("//div//input[@type='email']")
Fill_Email.send_keys(MyEmail)
Fill_Pass = browser.find_element_by_xpath("//div//input[@type='password']")
Fill_Pass.send_keys(MyPassword)
url ="http://api.capmonster.cloud/in.php?key="+capmonster_key+"&method=userrecaptcha&googlekey="+recaptcha_key+"&pageurl="+current_url
resp = requests.get(url)
if resp.text[0:2] != 'OK' :
  quit('Error. Captcha is not received')
captcha_id = resp.text[3:]
fetch_url = "http://api.capmonster.cloud/res.php?key="+capmonster_key+"&action=get&id=" + captcha_id
for i in range(1, 20):
    time.sleep(5) # wait 5 sec.
    resp = requests.get(fetch_url)
    if resp.text[0:2] == 'OK':
       break
browser.execute_script("""
  document.getElementById("g-recaptcha-response").innerHTML = arguments[0]
""", resp.text[3:])
time.sleep(3)

call_back_recaptcha = "___grecaptcha_cfg.clients[0].D.D.callback('"+resp.text[3:]+"')"

browser.execute_script(call_back_recaptcha)

browser.execute_script("""

  console.log("Noi dung token la:" + arguments[0])

""", resp.text[3:])
print("In ra Token")
print(resp.text[3:])
Press_Login=browser.find_element_by_xpath("//*[contains(text(),'Login')]")
Press_Login.click()
time.sleep(100000)
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?