为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Selenium Webdriver 和 Python 单击选项卡按钮

如何使用 Selenium Webdriver 和 Python 单击选项卡按钮

莫回无 2022-06-02 16:06:32
我将单击红色圆圈中的那个按钮。我想抓取那个网站。我如何编写python代码?我试过这段代码from bs4 import BeautifulSoupfrom urllib.request import urlopenimport timefrom selenium import webdriver driver = webdriver.Chrome('./chromedriver.exe')url_base = 'https://www.kebhana.com/cont/mall/mall08/mall0805/index.jsp?_menuNo=62608'driver.implicitly_wait(5)driver.get(url_base)openElement = driver.findElement(By.linkText("li[2]")).click(); time.sleep(2)openElement.click()time.sleep(5)driver.quit()soup错误消息显示如下:AttributeError                            Traceback (most recent call last)<ipython-input-16-19b58965022a> in <module>()      8       9 driver.get(url_base)---> 10 openElement = driver.findElement(By.linkText("li[2]")).click();     11      12 AttributeError: 'WebDriver' object has no attribute 'findElement'该按钮的html代码是<li class="on">   <a href="#none" onclick="javascript:doTab('spb_2812');">      <span>적 금</span>   </a></li>
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

你需要注意几件事:

  • 当您使用Selenium-Python客户端时,findElement()这不是有效的代码行。相反,您需要使用以下任一方法:

    • find_element_by_xpath()

    • find_element_by_css_selector()

  • linkText仅接受文本

  • 诱导time.sleep(5)会降低测试执行的性能。


解决方案

click()在带有文本的元素上作为적 금,您必须诱导WebDriverWait并且element_to_be_clickable()您可以使用以下任一Locator Strategies

  • CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.productSearchDiv li:nth-child(2) >a>span"))).click()
  • XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='productSearchDiv ']//li/a/span[text()='적 금']"))).click()
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
  • 浏览器快照:

//img1.sycdn.imooc.com//629870c7000149b713660760.jpg

查看完整回答
反对 回复 2022-06-02
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

findElement是 Java 语法,而不是 Python。此外,li是一个标签,而不是文本,并且无论如何by_link_text都不适用于标签。<span>

xpath改为使用

driver.find_element_by_xpath('//li[.//span[.="적 금"]]')


查看完整回答
反对 回复 2022-06-02
?
千巷猫影

TA贡献1829条经验 获得超7个赞

要单击选项卡,您需要在 xapth 下方诱导和使用WebDriverWait。element_to_be_clickable()


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 import webdriver


driver=webdriver.Chrome('./chromedriver.exe')

driver.get("https://www.kebhana.com/cont/mall/mall08/mall0805/index.jsp?_menuNo=62608")

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='productSDiv']//li//a[contains(@onclick,'spb_2812')]"))).click()



查看完整回答
反对 回复 2022-06-02
  • 3 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信