Selenium does not seem to register that I manually go to the publish0x.com page. Does anyone know a solution?
My goal is to manually do the captcha at the login page and afterwards, when I log in and land on the main page I want the script to resume.
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys import time import datetime from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import sys from selenium.webdriver.support.ui import WebDriverWait def waitForLoad(inputXPath): Wait = WebDriverWait(driver, 10) Wait.until(EC.presence_of_element_located((By.XPATH, inputXPath))) email = ' password = ' options = Options() options.add_experimental_option("detach", True) options.add_argument("--window-size=1920,1080") ## options.add_argument("user-data-dir=/Users/vadim/Library/Application Support/BraveSoftware/Brave-Browser") options.binary_location = '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser' driver_path = '/usr/local/bin/chromedriver' driver = webdriver.Chrome(options=options, executable_path=driver_path) driver.get('https://www.publish0x.com/login') waitForLoad('//*[@id="email"]') E_Mail_vak = driver.find_element_by_xpath('//*[@id="email"]') E_Mail_vak.send_keys(email) Pass_vak = driver.find_element_by_xpath('//*[@id="password"]') Pass_vak.send_keys(password) frame = driver.find_element_by_xpath('//iframe[contains(@src, "recaptcha")]') driver.switch_to.frame(frame) Captcha = driver.find_element_by_xpath("//*[@id='recaptcha-anchor']") Captcha.click() wait = WebDriverWait(driver, 500) wait.until(EC.url_to_be("publish0x.com")) driver.get('https://www.publish0x.com/newposts') post = driver.find_element_by_css_selector('#main > div.infinite-scroll > div:nth-child(1) > div.content') title = post.find_element_by_css_selector('h2 > a').text author = post.find_element_by_css_selector('p.text-secondary > small:nth-child(4) > a').text title.click() slider = driver.find_element_by_xpath('//*[@id="tipslider"]')
Advertisement
Answer
There are two ways I can think of, one by adding an Input statement like this:
options.add_argument('--disable-gpu')#For properly seeing the outputs input("Please do the captcha and press any key...)
In this way, the user would complete the data and then press any key for the script to continue.
The other way is by adding a try
and except
statement.
try: driver.find_element_by_id("some-element") except NoSuchElementException: #do something like print("Captcha Failed or Incomplete...")
In this, replace the element id “some-element” with any element that is present and only present after the user logs in, for e.g elements like Profile_nav or Settings are only present when someone logs in. So if the element doesn’t exist then it would mean that the user didn’t complete the captcha.