From 1af7b3da0c0fe3aa890a131accd698b99c158e06 Mon Sep 17 00:00:00 2001 From: Leon Date: Fri, 2 Jun 2023 23:39:15 +0200 Subject: [PATCH] Update test_workflow.py --- example/test_workflow.py | 178 ++------------------------------------- 1 file changed, 8 insertions(+), 170 deletions(-) diff --git a/example/test_workflow.py b/example/test_workflow.py index 4574a78..cc1a947 100644 --- a/example/test_workflow.py +++ b/example/test_workflow.py @@ -4,181 +4,19 @@ logging.basicConfig(level=10) from selenium.common.exceptions import WebDriverException from selenium.webdriver.remote.webdriver import By -import selenium.webdriver.support.expected_conditions as EC # noqa +import selenium.webdriver.support.expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait - import undetected_chromedriver as uc - -def main(args=None): - TAKE_IT_EASY = True - - if args: - TAKE_IT_EASY = ( - args.no_sleeps - ) # so the demo is 'follow-able' instead of some flashes and boom => done. set it how you like - - if TAKE_IT_EASY: - sleep = time.sleep - else: - sleep = lambda n: print( - "we could be sleeping %d seconds here, but we don't" % n - ) - - driver = uc.Chrome(headless=True, version_main=113) - driver.get("https://www.google.com") - - # accept the terms - driver.find_elements(By.XPATH, '//*[contains(text(), "Reject all")]')[ - -1 - ].click() # ;) - - inp_search = driver.find_element(By.XPATH, '//input[@title="Search"]') - - inp_search.send_keys( - "site:stackoverflow.com undetected chromedriver\n" - ) # \n as equivalent of ENTER key - - results_container = WebDriverWait(driver, timeout=3).until( - EC.presence_of_element_located((By.ID, "rso")) - ) - - driver.execute_script( - """ - let container = document.querySelector('#rso'); - let el = document.createElement('div'); - el.style = 'width:500px;display:block;background:red;color:white;z-index:999;transition:all 2s ease;padding:1em;font-size:1.5em'; - el.textContent = "Excluded from support...!"; - container.insertAdjacentElement('afterBegin', el); - setTimeout(() => { - el.textContent = "<<< OH , CHECK YOUR CONSOLE! >>>"}, 2500) - - """ - ) - - sleep(2) # never use this. this is for demonstration purposes only - - for item in results_container.children("a", recursive=True): - print(item) - - # switching default WebElement for uc.WebElement and do it again - driver._web_element_cls = uc.UCWebElement - - print("switched to use uc.WebElement. which is more descriptive") - results_container = driver.find_element(By.ID, "rso") - - # gets only direct children of results_container - # children is a method unique for undetected chromedriver. it is - # incompatible when you use regular chromedriver - for item in results_container.children(): - print(item.tag_name) - for grandchild in item.children(recursive=True): - print("\t\t", grandchild.tag_name, "\n\t\t\t", grandchild.text) - - print("lets go to image search") - inp_search = driver.find_element(By.XPATH, '//input[@name="q"]') - inp_search.clear() - inp_search.send_keys("hot girls\n") # \n as equivalent of ENTER - - body = driver.find_element(By.TAG_NAME, "body") - body.find_elements(By.XPATH, '//a[contains(text(), "Images")]')[0].click_safe() - - # you can't reuse the body from above, because we are on another page right now - # so the body above is not attached anymore - image_search_body = WebDriverWait(driver, 5).until( - EC.presence_of_element_located((By.TAG_NAME, "body")) - ) - - # gets all images and prints the src - print("getting image sources data, hold on...") - - for item in image_search_body.children("img", recursive=True): - print(item.attrs.get("src", item.attrs.get("data-src")), "\n\n") - - USELESS_SITES = [ - "https://www.trumpdonald.org", - "https://www.isitchristmas.com", - "https://isnickelbacktheworstbandever.tumblr.com", - "https://www.isthatcherdeadyet.co.uk", - "https://whitehouse.gov", - "https://www.nsa.gov", - "https://kimjongillookingatthings.tumblr.com", - "https://instantrimshot.com", - "https://www.nyan.cat", - "https://twitter.com", - ] - - print("opening 9 additinal windows and control them") - sleep(1) # never use this. this is for demonstration purposes only - for _ in range(9): - driver.window_new() - - print("now we got 10 windows") - sleep(1) - print("using the new windows to open 9 other useless sites") - sleep(1) # never use this. this is for demonstration purposes only - - for idx in range(1, 10): - # skip the first handle which is our original window - print("opening ", USELESS_SITES[idx]) - driver.switch_to.window(driver.window_handles[idx]) - - # because of geographical location, (corporate) firewalls and 1001 - # other reasons why a connection could be dropped we will use a try/except clause here. - try: - driver.get(USELESS_SITES[idx]) - except WebDriverException as e: - print( - ( - "webdriver exception. this is not an issue in chromedriver, but rather " - "an issue specific to your current connection. message:", - e.args, - ) - ) - continue - - for handle in driver.window_handles[1:]: - driver.switch_to.window(handle) - print("look. %s is working" % driver.current_url) - sleep(1) # never use this. it is here only so you can follow along - - print( - "close windows (including the initial one!), but keep the last new opened window" - ) - sleep(4) # never use this. wait until nowsecure passed the bot checks - - for handle in driver.window_handles[:-1]: - driver.switch_to.window(handle) - print("look. %s is closing" % driver.current_url) - sleep(1) - driver.close() - - # attach to the last open window - driver.switch_to.window(driver.window_handles[0]) - print("now we only got ", driver.current_url, "left") - - sleep(1) - - driver.get("https://www.nowsecure.nl") - - sleep(5) - - print("lets go to UC project page") - driver.get("https://www.github.com/ultrafunkamsterdam/undetected-chromedriver") - - - sleep(2) - +def main() + driver = uc.Chrome(browser_executable_path="/opt/hostedtoolcache/chromium/latest/x64/chrome", headless=True) + driver.get("https://nowsecure.nl") + WebDriverWait(driver, 15).until(EC.text_to_be_present_in_element(("css selector", "main h1"), "OH YEAH, you passed!")) driver.quit() if __name__ == "__main__": - import argparse - p = argparse.ArgumentParser() - p.add_argument("--no-sleeps", "-ns", action="store_false") - a = p.parse_args() - try: - main(a) - except: - logging.getLogger(__name__).debug('woops', exc_info=True) + + main(a) +