Sé que esta pregunta se ha hecho antes, pero he pasado por muchas de las soluciones de desbordamiento de pila y nada parece funcionar para mí. Estoy intentando raspar un sitio web para obtener datos de bienes raíces. Puedo hacer clic en la página de inicio de sesión y en una segunda página, pero cuando llego a la tercera página, no puedo hacer clic en un enlace.
Bloque HTML:
<div id="m_wm_w6_m_pnlContent" class="css_content wgt_content"> <table width="100%"> <tbody><tr> <td><a id="m_wm_w6_m_lv_ctrl0_m_lnkWatch" href="javascript:__doPostBack('m_wm$w6$m_lv$ctrl0$m_lnkWatch','')" style="white-space:nowrap; font-size:11px;">New Listing (186)</a> </td> <td width="50%"><div style="background-color:#008770;width:100%;height:12px;border:solid 1px #C0C0C0;"></div></td> </tr>
Quiero hacer click
en el enlace usando selenio para la etiqueta "New Listing"
con href="javascript:__doPostBack...
Mi código:
driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(url + login) driver.find_element_by_id('clareity').send_keys(username) driver.find_element_by_id('security').click() driver.find_element_by_id('security').send_keys(password) driver.find_element_by_id('loginbtn').click() driver.implicitly_wait(5) driver.find_element_by_id('appColumn386').click() #WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//html/body/form/div[3]/div[7]/table/tbody/tr/td[3]/div/div[2]/div/div[2]/table/tbody/tr[1]/td[1]/a"))).click() #WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='m_wm_w6_m_lv_ctrl0_m_lnkWatch']"))).click() #WebDriverWait(driver, 10).until(EC.staleness_of(driver.find_element_by_xpath("//html/body/form/div[3]/div[7]/table/tbody/tr/td[3]/div/div[2]/div/div[2]/table/tbody/tr[1]/td[1]/a"))) #driver.find_element_by_xpath("//html/body/form/div[3]/div[7]/table/tbody/tr/td[3]/div/div[2]/div/div[2]/table/tbody/tr[1]/td[1]/a").click()
El código comentado es algunas de las soluciones que probé y no parecían funcionar. Recibo el error "NoSuchElement"
a pesar de que cuando verifico las herramientas de desarrollo de Chrome, aparece el elemento. Incluso probé ambos XPaths
de las dev tools
de desarrollo, pero aún no puedo encontrarlos. También probé time.sleep()
para permitir que la página se cargue. Es posible que me esté perdiendo algo muy fácil aquí, pero he estado atascado por un tiempo, se agradece cualquier ayuda :)
Dado que el text
se encuentra between a tag
, le recomiendo que utilice LINK_TEXT
como primera opción.
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "New Listing (186)"))).click()
o
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "New Listing"))).click()
PD: asegúrese de no estar en any new tab or windows.
ya que has mencionado que estás en la 3rd page.