【发布时间】:2021-09-04 08:17:41
【问题描述】:
目标: 需要打开一个网页,按类查找 url,然后在 chrome 的新标签中打开每个 url
我尝试了什么:
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path="C:\\Users\xxx\Downloads\chromedriver_win32\chromedriver.exe")
driver.maximize_window()
driver.get("https://xxxxxxxx.com")
elements = driver.find_elements_by_class_name("post-comments")
for e in elements:
e.click()
driver.quit()
当前输出:
它只是在同一个父窗口中打开第一个 url,然后停在那里.. 焦点不会指向基本 url,因此它无法在新选项卡中打开第二个和其他 url。
请告诉我你的建议。
Update1:当我搜索相对 xpath 时,我知道我需要使用正则表达式,这样我才能找到其中包含“响应”的所有链接。 为此,我尝试使用
driver.find_element_by_css_selector("a[href*='respond']]")
但它出错了没有find_element。
更新 2: 经过一些试验,我能够使用下面的代码实现我需要的最大输出。但是下面的代码只在第一页上工作,当下面的代码完成第一页时,就会有“NextPage”按钮,我需要点击它来打开那个页面,这将成为新的主页,我需要运行再次在该页面上的下面一段代码。如何在此页面上的元素完成后告诉下面的代码,单击“NextPage”按钮并在该页面的逻辑下方运行。请推荐
from selenium import webdriver
import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(executable_path="C:\\Users\xxx\Downloads\chromedriver_win32\chromedriver.exe")
driver.maximize_window()
driver.get("https://xxxxxxxx.com")
current_windows_handle = driver.current_window_handle
elements = driver.find_elements_by_css_selector('h2.post-title.entry-title>a')
for ele in (elements):
url = [ele.get_attribute("href")]
for x in url:
time.sleep(2)
driver.execute_script("window.open('');")
handles = driver.window_handles
driver.switch_to.window(handles[1])
driver.get(x)
driver.find_element_by_xpath("//span[@class='mb-text'][contains(.,'Posts')]").click()
time.sleep(2)
driver.close()
driver.switch_to.window(driver.window_handles[1])
time.sleep(5)
actualurl = driver.current_url
with open(r'c:\test\new.txt', 'a') as text_file:
text_file.write(actualurl + '\n')
driver.close()
time.sleep(5)
driver.switch_to.window(current_windows_handle)
driver.close()
driver.quit()
【问题讨论】:
标签: python python-3.x selenium selenium-webdriver