【问题标题】:Python Selenium one element with different xpath using Try-LoopPython Selenium 使用 Try-Loop 具有不同 xpath 的一个元素
【发布时间】:2021-03-03 06:25:05
【问题描述】:

网站中有一些具有不同 xpath 的元素,例如“代码”:

.td[1]/div[4]/div
.td[1]/div[3]/div
null

如果 xpath = .td[1]/div[4]/div,那么 .td[1]/div[3]/div 中应该有另一个 ISIN 代码 我想通过以下方式访问它们:

driver.get('https://www.chinabondconnect.com/en/Primary/Primary-Information/Onshore.html')
wait = WebDriverWait(driver, 30)
driver.find_element_by_link_text('Others').click()

try: 
    codes=[code.get_attribute('textContent') for code in driver.find_elements_by_xpath("//table[@id='tb7']//tr[starts-with(@class,'tb2tr pg')]//td[1]/div[4]/div")]
    ISINs=[ISIN.get_attribute('textContent') for ISIN in driver.find_elements_by_xpath("//table[@id='tb7']//tr[starts-with(@class,'tb2tr pg')]//td[1]/div[3]/div")]
except:
    try:
      codes=[code.get_attribute('textContent') for code in driver.find_elements_by_xpath("//table[@id='tb7']//tr[starts-with(@class,'tb2tr pg')]//td[1]/div[3]/div")]                 
    except:
      codes = 'null'
#dateframe=...               

但它不会返回网站中的所有发行人,只有少数几个,不知道为什么会这样,任何帮助将不胜感激!

【问题讨论】:

  • 只有 12 个 isin 和 53 个代码,你期待什么?
  • 嗨,但我希望无值的可以在数据框中返回“null”,但它只是消除了没有代码的那些
  • 所以你想让 isin 和代码长度相等吗?使用正常循环。
  • 你想要全部 200 行左右吗?
  • @ArundeepChohan 你好,是的,我想获取所有记录的发行人的代码/ISIN 信息(如果没有,只需在 csv 数据框中返回“null”或空白)也可以用于到期xpath 不同("//table[@id='tb7']//tr[starts-with(@class,'tb2tr pg')]//td[3]/div[3]/span[2]")div[5],不知道如何处理这种情况..

标签: python selenium


【解决方案1】:

到目前为止,我有类似的东西。为该 td 的没有子元素插入 null。

driver.get('https://www.chinabondconnect.com/en/Primary/Primary-Information/Onshore.html')
driver.find_element_by_link_text('Others').click()
codes=[]
ISINs=[]
rows=driver.find_elements_by_xpath("//table[@id='tb7']//tr[starts-with(@class,'tb2tr pg')]")
for row in rows:
    try: 
        codes.append(row.find_element_by_xpath("./td[1]/div[4]/div").get_attribute('textContent'))
    except:
        codes.append('null')
    try: 
        ISINs.append(row.find_element_by_xpath("./td[1]/div[3]/div").get_attribute('textContent'))
    except:
        ISINs.append('null')
        
dataframe=pd.DataFrame({'codes':codes,'ISINs':ISINs}) 
print (dataframe)

导入

import pandas as pd

【讨论】:

  • 您好,感谢您的帮助!但是如果我还想要数据框中的发行者和日期,我还需要创建空列表对吗?或者只是发行者的另一个 for 循环:issuers=[issuer.get_attribute('textContent') for issuer in driver.find_elements_by_xpath("//table[@id='tb7']//tr[starts-with(@class,'tb2tr pg')]//td[1]/div[2]/div")]
  • 是的,如果你想附加 null,你需要附加一些东西。
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多