Soy nuevo en web scraping e intento abrir un enlace con selenium:

En Google Chrome utilizo inspeccionar el botón que deseo abrir y obtengo la siguiente información:

<a href="/c#candidates?id=a6b0e325a499&amp;candidateFilter=4af15d8991a8" data-tn-link="true" data-tn-element="view-unread-candidates"><span class="jobs-u-font--bold">(4 awaiting review)</span></a>

Intento obtener todos los enlaces con la misma estructura y abrirlos para poder acceder a sus datos.

enter image description here enter image description here

(Tengo varios botones con la misma estructura pero diferente href que necesito ver)

También en Properties puedo ver a para el mismo botón.

Sin embargo, quiero ser más preciso que solo usar, ya que solo quiero esos enlaces particulares mencionados anteriormente:

elements = driver.find_elements_by_tag_name("a")

¿Alguien puede aconsejar?

3
Solal 11 may. 2019 a las 00:43

4 respuestas

La mejor respuesta

Puede usar //a[@data-tn-element = 'view-unread-candidates'], que enumerará todos los candidatos no leídos.

Si desea un candidato específico por ID de candidato, utilice el siguiente xpath. Y establezca el ID de candidato con la identificación deseada.

candidateId = 'a6b0e325a499'
"//a[@data-tn-element = 'view-unread-candidates'][contains(@href,'id=" + candidateId + "')]"
2
supputuri 10 may. 2019 a las 23:09

Yo usaría:

Elementos de la lista = driver.findElements (By.xpath ("// a [@ data-tn-element = 'view-unread-candidatos']"));

    Iterator<WebElement> iter = elements.iterator();

    while (iter.hasNext()) {
        WebElement item = iter.next();
        String href = item.getAttribute("href");
        System.out.println("href is " + href);
    }
}

Y si desea hacer clic en el enlace con el href en particular, puede poner la condición if después de obtener el href en el código anterior. Cuando se cumpla esa condición, haga clic en el elemento.

0
Ashesh Bhat 12 may. 2019 a las 18:57

Yo usaría

elem = driver.find_element_by_class_name("jobs-u-font--bold")

Para obtener el <span>, ya que parece un nombre de clase único (aunque no puedo estar seguro de su publicación). Entonces puedes alcanzar el nivel <a> con

a_elem = elem.find_element_by_xpath("..")

Entonces puedes a_elem.click() o lo que sea que estés tratando de hacer.

1
Reedinationer 10 may. 2019 a las 22:05

Para acceder a la etiqueta de anclaje, puede usar el selector css con el atributo data-tn-element="view-unread-candidates". Creo que debería ser igual para todas las etiquetas de anclaje.

elements=driver.find_elements_by_css_selector('a[data-tn-element="view-unread-candidates"]')
for ele in elements:
    print(ele.get_attribute("href"))

O si desea utilizar el elemento secundario y luego desea obtener la etiqueta principal, intente a continuación el código con xpath.

elements=driver.find_elements_by_xpath("//span[@class='jobs-u-font--bold']")
for ele in elements:
    print(ele.find_element_by_xpath("./parent::a").get_attribute('href'))
1
KunduK 10 may. 2019 a las 22:25