Python 如何忽略位于括号中的链接?
我有一个任务要证明,当你不断点击第一个链接时,大多数维基百科页面都会指向一个“哲学”页面 我创建了一个使用xpath查找第一个链接的代码,但问题是我应该忽略放在括号内的链接 例如,文本(粗体链接): Semiosis(来自希腊语:σημείωσει,sēmeí333; sis,动词σημε的派生词)ῶ, sēmeiô,“标记”)是任何形式的活动 这个div中的第一个链接是“希腊语”,但这会让我陷入一个循环,所以我想过滤掉它,然后单击括号后面的第一个链接。在本例中为“活动” 有没有办法忽略括号中的链接Python 如何忽略位于括号中的链接?,python,selenium,Python,Selenium,我有一个任务要证明,当你不断点击第一个链接时,大多数维基百科页面都会指向一个“哲学”页面 我创建了一个使用xpath查找第一个链接的代码,但问题是我应该忽略放在括号内的链接 例如,文本(粗体链接): Semiosis(来自希腊语:σημείωσει,sēmeí333; sis,动词σημε的派生词)ῶ, sēmeiô,“标记”)是任何形式的活动 这个div中的第一个链接是“希腊语”,但这会让我陷入一个循环,所以我想过滤掉它,然后单击括号后面的第一个链接。在本例中为“活动” 有没有办法忽略括号中的
start_page = "https://en.wikipedia.org/wiki/Special:Random"
def click_link():
link = driver.find_element_by_xpath("//div[@class='mw-parser-output']/p/a")
link.click()
driver.get(start_page)
redirects = 0
title = driver.find_element_by_tag_name("title").text
while title != "Philosophy":
click_link()
redirects += 1
title = driver.find_element_by_tag_name("title").text
print(redirects)
这是您的代码。使用以下同级获取下一个子项
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium import webdriver
def click_link():
wait=WebDriverWait(driver,5)
element = wait.until(expected_conditions.element_to_be_clickable((By.XPATH, "//div[@class='mw-parser-output']/p/a[1]/following-sibling::a")))
element.click()
driver = webdriver.Chrome()
driver.get("https://en.wikipedia.org/wiki/Special:Random")
title=driver.title
redirects=0
while title != "Action (philosophy) - Wikipedia":
click_link()
redirects += 1
title =driver.title
print(title)
print(redirects)
这比我最初想象的要复杂得多。问题是,您可以使用Selenium在页面上定位元素,但实际上看不到该元素的文本上下文,例如,该链接是否在
()
s中。这就是它变得更加困难的地方。如果将所有内容都视为元素,则无法查看上下文(无法查看其他元素中的元素)。如果将所有内容视为文本(从父级获取.text
),则无法再看到什么是链接)。我能想到的唯一方法是:
.get_属性(“innerHTML”)
获取该元素中包含的HTML()
s中的链接A
标记的字符串,而不是可以单击的实际元素。有了这些文字,你可以做一些事情
A
标记的href
,然后重新构建可以导航到的URLimport re
...
start_page = "https://en.wikipedia.org/wiki/Special:Random"
driver.get(start_page)
first_para = driver.find_element_by_css_selector("#mw-content-text > div > p")
text = first_para.text
regex = "(<a .*?<\/a>)|\(.*?\)"
matches = re.findall(regex, text)
print(matches[1])
或者换个方向。选择取决于您和您的要求,但这应该足以让您开始。到目前为止,您尝试了什么?请将您的代码添加到您的问题中。这比乍一看要复杂得多。如果不解析页面中的HTML,您将无法完成此操作,这将非常复杂。谢谢。虽然这不是我想要的解决方案。问题是括号中的链接可能不同(希腊语、拉丁语等)。因为我是从一个随机页面开始的,所以我需要弄清楚如何完全跳过括号内的链接,然后单击括号外的第一个链接。@Chromec:我已经更新了答案。请检查并让我知道。您还没有确定链接是否在括号内。谢谢,您的解决方案似乎有效。我得到了广告建议,诀窍在于正确的xpath搜索……如果这一点或任何其他答案有用,请投票表决。一旦找到问题的答案,请将其标记为已接受,这样问题就不会没有答案。
new_url = "https://en.wikipedia.org" + href