Щелкните и очистите ссылки 'a href' по имени класса, используя Selenium в Python - PullRequest
1 голос
/ 29 мая 2020

У меня есть следующая ссылка href только с идентификатором класса. Я пытаюсь заставить Selenium рекурсивно переходить по каждой ссылке, но Selenium не возвращает правильные источники страниц из каждой ссылки 'a href'.

<div class="row">
 <div class="item">
  ↳<a href /path/to/link/ class="link-box">
 <div class="item">
 <div class="item">
 <div class="item">

Что я здесь делаю не так:

driver = webdriver.Chrome("/Users/me/Downloads/chromedriver", options=options)
driver.get("https://the_website")
link_box = driver.find_elements_by_class_name('link-box')

for i in range(len(link_box)):
  driver.execute_script("arguments[0].click();", link_box[i])
page_source = driver.page_source
pprint(page_source)

1 Ответ

0 голосов

Я написал другой код, чтобы сделать это.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
#driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver = webdriver.Firefox(executable_path='geckodriver')
driver.get("url")
l=[]
for a in driver.find_elements_by_class_name('link-box'):
    link = a.get_attribute('href')
    l.append(link)
print(l)

for b in range(len(l)):
    driver.execute_script("window.open('');")
    driver.switch_to.window(driver.window_handles[b+1]) 
    driver.get(l[b])
    print(l[b])

Во-первых, он возьмет всю ссылку, которая имеет класс link-box. Затем он откроет все ссылки в новых вкладках. В противном случае может возникнуть ошибка. Я сделал это с Firefox, но если вы делаете с Chrome строкой комментария 4 и строкой раскомментирования 3 . Тогда дайте верный путь.

...