Update test_workflow.py
This commit is contained in:
parent
2713a38ddc
commit
1af7b3da0c
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue