使用正则表达式、python 循环浏览 XPath 列表



这是我的代码

src = driver.page_source
XPATHLoop=['//*[@id="General"]/fieldset/dl/dd[15]', '//*[@id="General"]/fieldset/dl/dd[14]', '//*[@id="General"]/fieldset/dl/dd[13]','//*[@id="General"]/fieldset/dl/dd[12]']
for d in XPATHLoop:
Checkpath = re.search(d,src)
if Checkpath =='//*[@id="General"]/fieldset/dl/dd[15]':
Status= driver.find_element_by_xpath('//*[@id="General"]/fieldset/dl/dd[8]').text
break
elif  Checkpath == '//*[@id="General"]/fieldset/dl/dd[14]':
Status= driver.find_element_by_xpath('//*[@id="General"]/fieldset/dl/dd[7]').text
break
elif Checkpath == '//*[@id="General"]/fieldset/dl/dd[13]':
Status = driver.find_element_by_xpath('//*[@id="General"]/fieldset/dl/dd[6]').text
break
elif Checkpath == '//*[@id="General"]/fieldset/dl/dd[12]':
Status= driver.find_element_by_xpath('//*[@id="General"]/fieldset/dl/dd[5]').text
break
else:
Status= "NULL"
print(Status)

输出为"NULL",这意味着它没有找到任何内容,而这些路径确实/可以存在于源中。我目前正在使用硒和正则表达式。我目前正在考虑正则表达式中可能有另一种方法来拉取 xpaths。

要解析HTML和XML文档(页面源代码(并获取带有定位器的元素,您可以使用beautifulsoup,如何使用它。

正则表达式不分析 HTML 文档。你得到NULL,因为Checkpath = re.search(d,src)None

下面是如何在没有循环和解析页面源代码的情况下获取状态的示例。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
p = wait.until(EC.visibility_of_all_elements_located((By.XPATH, '//*[@id="General"]/fieldset/dl/dd')))
status = "NULL"
r = range(0, len(p))
if 15 in r:
status = p[8].text
elif 14 in r:
status = p[7].text
elif 13 in r:
status = p[6].text
elif 12 in r:
status = p[5].text

从您发布的代码来看,除了 DD 元素的索引之外,您硬编码的字符串都相同。由于 Status 索引始终比 Checkpath 的索引少 7,因此您可以遍历 15-12,进行搜索,然后 Status 仅为 15-7。代码如下。

src = driver.page_source
loop = [15,14,13,12]
for d in loop:
Checkpath = re.search('//*[@id="General"]/fieldset/dl/dd[' + str(d) + ']',src)
Status = driver.find_element_by_xpath('//*[@id="General"]/fieldset/dl/dd[' + str(d - 7) + ']').text
print(Status)

下面列出了我对此错误的解决方案 我能够在 for 循环中循环时执行嵌套。我的列表 XpathLoop 显示了 dd 项的数值。这将循环运行,直到找到我想要的 dt"状态日期"。找到所需的文本后,它会进入一个 while 循环,直到出现状态日期格式。dd 项与网页上的 dt 项完全独立。

XPATHLoop=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
for d in XPATHLoop:
try:
findtool = driver.find_element_by_xpath('//[@id="General"]/fieldset/dl/dt['+str(d)+']')
if findtool.text == 'Status Date':
Status=driver.find_element_by_xpath('//[@id="General"]/fieldset/dl/dd['+str((d))+']').text
i=1
while re.search(r'(d{4})',Status) == None:
Status= driver.find_element_by_xpath('//*[@id="General"]/fieldset/dl/dd['+str((d+i))+']').text
i=i+1
except:
pass
print(Status)

最新更新