from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
chrome_driver_path = "/Users/greta/Development/chromedriver"
driver = webdriver.Chrome(executable_path=chrome_driver_path)
driver.get("https://en.wikipedia.org/wiki/Main_Page")
articles = driver.find_element(By.XPATH, "/html/body/div[3]/div[3]/div[5]/div[1]/div[1]/div/div[3]/a[1]")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[3]/div[3]/div[5]/div[1]/div[1]/div/div[3]/a[1]"))).click()
try:
number_of_articles = articles.get_attribute("textContent")
print(number_of_articles)
except:
print("Unable to find")
finally:
driver.quit()
I am learning Selenium with Python. Above is my code. I want to retrieve this circled element in Wikipedia, as we can see it is an anchor tag<a>
that is within a <div>
that has an id of "articlecount". I've tried the By.CSS_SELECTOR which didn't work, so I use XPATH instead as shown in the code. But it still doesn't work.
Then I find out that if I print the articles
variable alone, the code won't raise an error. However, as soon as I print articles.text
or articles.get_attribute("textContent")
, the error still occurs.
Would be great if anybody can give me a helping hand. Thanks in advance.
CodePudding user response:
You have a small bug. In this line, you are clicking on the element after finding it, which causes the page to change and you cant find the article count.
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[3]/div[3]/div[5]/div[1]/div[1]/div/div[3]/a[1]"))).click()
Just remove the click()
and it will work