【问题标题】:how can i open link in href with selenium python?如何使用 selenium python 打开 href 中的链接?
【发布时间】:2022-01-19 17:09:28
【问题描述】:

href 内的链接是不断变化的,但是这个href 的xpath 总是一样的。 如何点击www.confirmationemail.com

<div dir="ltr">
<p>exampleTEXT.</p>
<p><a href="www.confirmationemail.com" target="_blank">www.confirmationemail.com</a></p>
<p>exampleTEXT.</p>
<p>exampleTEXT,</p>
<p>exampleTEXT</p>
</div>

这是我正在处理的页面:https://www.minuteinbox.com/

流程如下:用从这里收到的邮件注册一个站点,收到邮件,登录到邮件,但是我不能点击邮件内容中的链接。

from selenium import webdriver
from time import sleep
import config2 as cf
from selenium.webdriver.support.select import Select
import selenium.webdriver.support.ui as ui
from selenium.webdriver.common.keys import Keys
from asyncio import sleep
import time


driver = webdriver.Chrome("C:\\ChromeDriver\\chromedriver.exe")


url = "https://www.minuteinbox.com/"
url2 = "EXAMPLE.COM"

driver.get(url)

element =     driver.find_element_by_xpath("XPATH").text
print(element)

time.sleep(4)



driver.execute_script("window.open('');")

driver.switch_to.window(driver.window_handles[1])
driver.get(url2)

sec = driver.find_element_by_xpath("XPATH")
sec.click()

devam = driver.find_element_by_xpath("XPATH")
devam.click()

ad = driver.find_element_by_xpath("XPATH")
ad.send_keys("deneme")

soyad = driver.find_element_by_xpath("XPATH")
soyad.send_keys("test")

eMail = driver.find_element_by_css_selector("#user_email")
eMail.send_keys(element)

eMail2 = driver.find_element_by_css_selector("#user_email_confirmation")
eMail2.send_keys(element)

sifre = driver.find_element_by_css_selector("#user_password")
sifre.send_keys("PASS")

sifre2 =     driver.find_element_by_css_selector("#user_password_confirmation")
sifre2.send_keys("PASS")

buton = driver.find_element_by_css_selector("SELECT")
buton.click()

hesapol = driver.find_element_by_css_selector("SELECT")
hesapol.click()
sleep(2)

driver.switch_to.window(driver.window_handles[0])
time.sleep(7)

bas = driver.find_element_by_css_selector("#schranka > tr:nth-child(1)")
bas.click()

time.sleep(1)

time.sleep(1)
SD = driver.switch_to.frame(driver.find_element_by_css_selector("iframe#iframeMail"))
time.sleep(5)       
SD = driver.find_element_by_xpath("//a[contains(@href,'minuteinbox')]").click

driver.switch_to.default_content()

sd = 我把它放在这里只是为了能够把它写在代码部分

已解决

进口

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

bas = driver.find_element_by_css_selector("#schranka > tr:nth-child(1)")
bas.click()
time.sleep(3)

wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,  "iframe[id='iframeMail']")))
print(driver.page_source)


link = driver.find_element_by_xpath("/html/body/div/p[2]/a")
link.click()

【问题讨论】:

  • href 里面的link 是不断变化的,但是这个href 的xpath 总是一样的: 你这是什么意思?
  • 当我复制 href xpath 时它总是一样的,但每次我打开页面时它都是一个不同的链接
  • @Prophet 我试过但我得到这个错误:无法找到元素:{“method”:“xpath”,“selector”:“/html/body/div/p[2]/a "}
  • 1) 可能你错过了延迟 2) 你能分享你所有的代码吗?如果可能的话,包括你正在尝试处理的页面的链接?
  • 为什么你的代码从这个driver.switch_to.window(driver.window_handles[0])开始?我们不知道你在此之前写了什么。

标签: python python-3.x selenium selenium-webdriver


【解决方案1】:

正如您所提到的,该元素的 XPath 是恒定的。
因此,您可以基于常量 XPath 定位器获取该元素并单击它。 像这样的:

driver.find_element_by_xpath('the_constant_xpath').click()

UPD
您希望被点击的元素可以通过 XPath 定位到。
但是,它位于 iframe 内,因此要访问它,您必须先切换到该 iframe。
我还改进了您的定位器。
所以你的代码可能是这样的:

driver.switch_to.window(driver.window_handles[0])
time.sleep(5)

bas = driver.find_element_by_css_selector("td.from")
bas.click()

time.sleep(1)
driver.switch_to.frame(driver.find_element_by_css_selector("iframe#iframeMail"))

driver.find_element_by_xpath("//a[contains(@href,'minuteinbox')]").click

当你在 iframe 中完成工作后,你将不得不使用默认内容

driver.switch_to.default_content()

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 2019-10-18
    • 2022-08-11
    • 2022-11-23
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多