首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用PYTHON使Selenium获得href?

如何使用PYTHON使Selenium获得href?
EN

Stack Overflow用户
提问于 2022-08-15 21:31:01
回答 2查看 66关注 0票数 0

我尝试了我在这里找到的所有方法,https://selenium-python.readthedocs.io/locating-elements.html,但我无法从页面中获得该链接。

我需要从href获得链接。

HTML页面代码:

代码语言:javascript
运行
复制
<p style="margin: 0px 30px 30px 30px;text-align: center;-webkit-box-sizing: border-box;max-width: 100%;-moz-box-sizing: border-box;box-sizing: border-box;">
                                <!--[if mso]>
                                    <v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word" href="https://u.pcloud.com/track?url=aHR0cHM6Ly91LnBjbG91ZC5jb20vPyNwYWdlPXZlcmlmeW1haWwmY29kZT1UTE9TN1pUWXN6MmxPSWh2bWhZUU9jd2RxSHk3bUJoejk3&token=j7yZTLOS7Z7Z87Zh354dzp5jNRuIf7aJshX1XzSehQX" style="height:49px;v-text-anchor:middle;width:289px;" arcsize="7%" strokecolor="#88CC17" fillcolor="#88CC17">
                                        <w:anchorlock/>
                                        <center style="color:#ffffff;font-family:sans-serif;font-size:13px;font-weight:bold;">CLICK TO VERIFY EMAIL</center>
                                    </v:roundrect>
                                <![endif]-->
                                <a href="https://u.pcloud.com/track?url=aHR0cHM6Ly91LnBjbG91ZC5jb20vPyNwYWdlPXZlcmlmeW1haWwmY29kZT1UTE9TN1pUWXN6MmxPSWh2bWhZUU9jd2RxSHk3bUJoejk3&token=j7yZTLOS7Z7Z87Zh354dzp5jNRuIf7aJshX1XzSehQX" style="color: #FFF;background-color: #88CC17;text-decoration: none;width: 285px;font-weight: 500;display: inline-block;padding: 13px 0px 13px 0px;border: 2px solid #88CC17;border-radius: 3px;-moz-border-radius: 3px;-webkit-border-radius: 3px;mso-hide:all;">
                                    CLICK TO VERIFY EMAIL
                                </a>

一些失败的尝试:

代码语言:javascript
运行
复制
link_ativador = navegador.find_element(By.LINK_TEXT, 'CLICK TO VERIFY EMAIL')
print(link_ativador)

link_ativador = navegador.find_element(By.XPATH, '/html/body/table/tbody/tr[2]/td/table/tbody/tr[3]/td/table/tbody/tr/td/p[3]/a').get_attribute('href')
print(link_ativador)

link_ativador = navegador.find_element(By.LINK_TEXT, 'CLICK TO VERIFY EMAIL').get_attribute('href')
print(link_ativador)

+一些失败的尝试:

代码语言:javascript
运行
复制
link_try1 = WebDriverWait(navegador, 20).until(EC.presence_of_element_located((By.XPATH, '//a[text()="CLICK TO VERIFY EMAIL"]'))).get_attribute('href')
print(link_try1)

link_try2 = (WebDriverWait(navegador, 20).until(EC.visibility_of_element_located((By.PARTIAL_LINK_TEXT, "CLICK TO VERIFY EMAIL"))).get_attribute("href"))
print(link_try2)

link_try3 = (WebDriverWait(navegador, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(., 'CLICK TO VERIFY EMAIL')]"))).get_attribute("value"))
print(link_try3)

完整的代码:

代码语言:javascript
运行
复制
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# Chrome e Proxy Tor
servico = Service(ChromeDriverManager().install())
proxy = "socks5://127.0.0.1:9150"  # Tor
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument(f"--proxy-server={proxy}")
navegador = webdriver.Chrome(service=servico, options=chrome_options)

navegador.get('https://tmail.link/inbox/xxxxx.xxxxxx@tmail.link/')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-15 21:46:26

您应该能够使用以下定位器获得该href

代码语言:javascript
运行
复制
link_url = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '//a[text()="CLICK TO VERIFY EMAIL"]'))).get_attribute('href')

您还需要导入:

代码语言:javascript
运行
复制
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

硒文档:https://www.selenium.dev/documentation/

编辑:在OP确认实际的url后,我们可以看到该链接位于iframe中,因此下面的代码将检索它:

代码语言:javascript
运行
复制
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

chrome_options = Options()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('disable-notifications')
chrome_options.add_argument("window-size=1280,720")

webdriver_service = Service("chromedriver/chromedriver") ## path to where you saved chromedriver binary
browser = webdriver.Chrome(service=webdriver_service, options=chrome_options)
actions = ActionChains(browser)

url = 'https://tmail.link/inbox/ambers.rushing@tmail.link/b2b20ce5eeb40a74a8c4ce7d4438883fa44a69c1/'
browser.get(url) 

WebDriverWait(browser, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH, "//iframe[@src='1']")))
specific_url = WebDriverWait(browser, 20).until(EC.visibility_of_element_located((By.PARTIAL_LINK_TEXT, "CLICK TO VERIFY EMAIL"))).get_attribute("href")
print(specific_url)

这将在终端打印:

代码语言:javascript
运行
复制
switched to iframe
https://u.pcloud.com/track?url=aHR0cHM6Ly91LnBjbG91ZC5jb20vPyNwYWdlPXZlcmlmeW1haWwmY29kZT1UTE9TN1pUWXN6MmxPSWh2bWhZUU9jd2RxSHk3bUJoejk3&token=j7yZTLOS7Z7Z87Zh354dzp5jNRuIf7aJshX1XzSehQX

上面代码中的设置是linux上的chrome/chromedriver,但是您可以根据自己的情况调整它,只需观察导入,以及定义浏览器/驱动程序之后的代码。

票数 1
EN

Stack Overflow用户

发布于 2022-08-15 21:51:53

该元素是一个动态元素,因此提取href的值以导出的WebDriverWait,您可以使用以下任何一个

使用

  • 的PARTIAL_LINK_TEXT:

打印(驱动程序,20).until(EC.visibility_of_element_located((By.PARTIAL_LINK_TEXT,“单击以验证EMAIL"))).get_attribute("href")) )

使用XPATH的

打印(驱动程序,20).until(EC.visibility_of_element_located((By.XPATH,"//acontains(. ),‘单击以验证EMAIL')"))).get_attribute("value"))

  • Note:您必须添加以下导入:

从selenium.webdriver.support.ui导入WebDriverWait从selenium.webdriver.common.by导入从selenium.webdriver.support导入expected_conditions作为EC

您可以在Python Selenium - get href value

中找到相关的讨论

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73366624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档