I've finished my automated script with python selenium in Chrome normal mode and everything works great.
Until I decided to make it work in headless mode, so now I cannot locate a partial link text which already works in normal mode.
I'm using this code to open chrome in headless.
option = webdriver.ChromeOptions()
option.headless = True
option.AddArgument("window-size=1200,700");
This the code that I use to locate the element
tmp = True
while tmp:
try:
Confirmm = driver.find_element_by_partial_link_text('Confirm')
Confirmm.click()
tmp = False
except:
continue
And this is the code of the link text I'm trying to click
<a href="https://temp-mail.org/en/view/346e2949a4a1f77ededd7542ba7947ed" title="" class="viewLink title-subject" data-mail-id="346e2949a4a1f77ededd7542ba7947ed">Confirm your profile</a>
NOTE: the data-mail-id= is not static and changes every time.
I tried to use Javascript but the word I'm willing to click doesn't have an ID, NAME, or TAG-NAME, and the ClassName doesn't work as well.
Any idea how to solve this?
To click on the element with text as Confirm your profile you can use either of the following Locator Strategies:
Using link_text
:
driver.find_element_by_link_text("Confirm your profile").click()
Using partial_link_text
:
driver.find_element_by_partial_link_text("Confirm").click()
Using css_selector
:
driver.find_element_by_css_selector("a.viewLink.title-subject[href^='https://temp-mail.org/en/view']").click()
Using xpath
:
driver.find_element_by_xpath("//a[@class='viewLink title-subject' and starts-with(@href, 'https://temp-mail.org/en/view')][contains(., 'Confirm your profile')]").click()
Ideally, to click on the element you need to induce WebDriverWait for the element_to_be_clickable()
and you can use either of the following Locator Strategies:
Using LINK_TEXT
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Confirm your profile"))).click()
Using PARTIAL_LINK_TEXT
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Confirm"))).click()
Using CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.viewLink.title-subject[href^='https://temp-mail.org/en/view']"))).click()
Using XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='viewLink title-subject' and starts-with(@href, 'https://temp-mail.org/en/view')][contains(., 'Confirm your profile')]"))).click()
Note: You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC