首页 > 解决方案 > Python selenium 多次单击并返回相同的 xpath

问题描述

我尝试在不同页面获取同一日期下的文章,有三个'Corp,FIG,SSA',我需要单击一个然后返回并单击另一个,但是元素的 xpath 是相同的,所以我想知道是否有一些“聪明”的方式来做到这一点,而不是一次又一次地复制?

如果页面中没有文章,我也希望网站返回,我应该使用“尝试”吗?

令人惊讶的是,我在 csv 文件中得到了两次结果,就像 aabb... 不知道为什么

driver.get('https://www.globalcapital.com/Asia/Bonds')
Corp = driver.find_element_by_link_text("Corp")
Corp.click()
driver.implicitly_wait(10)
links=[link.get_attribute('href') for link in driver.find_elements_by_xpath("//div[contains(text(),'28 Jan 2021')]/preceding::a[2]")]
titles = [link.text for link in driver.find_elements_by_xpath("//div[contains(text(),'28 Jan 2021')]/preceding-sibling::h3/a")]
for link in links:
    for title in titles:
        dataframe = pd.DataFrame({'col1':title,'col2':link},index=[0])
        dataframe.to_csv('hi.csv',mode='a+',header=False,index=False,encoding='utf-8-sig')
driver.back()
FIG = driver.find_element_by_link_text("FIG")
FIG.click()
driver.implicitly_wait(10)
links=[link.get_attribute('href') for link in driver.find_elements_by_xpath("//div[contains(text(),'28 Jan 2021')]/preceding::a[2]")]
titles = [link.text for link in driver.find_elements_by_xpath("//div[contains(text(),'28 Jan 2021')]/preceding-sibling::h3/a")]
for link in links:
    for title in titles:
        dataframe = pd.DataFrame({'col1':title,'col2':link},index=[0])
        dataframe.to_csv('hi.csv',mode='a+',header=False,index=False,encoding='utf-8-sig')
driver.back()
SSA = driver.find_element_by_link_text("SSA")
SSA.click()
driver.implicitly_wait(10) 

标签: pythonseleniumfor-loopxpath

解决方案


您正在迭代titles多次(每次迭代一次link)。您需要遍历链接、标题

for link, title in zip(links, titles):
    dataframe = pd.DataFrame({'col1':title,'col2':link},index=[0])
    dataframe.to_csv('hi.csv',mode='a+',header=False,index=False,encoding='utf-8-sig')

推荐阅读