【问题标题】:How to click on a specific onclick valueusing Selenium and Python如何使用 Selenium 和 Python 点击​​特定的 onclick 值
【发布时间】:2022-01-15 12:19:52
【问题描述】:

我可以做些什么来替换Selenium Python 中的find_element_css_selector 以点击特定的onclick

(javascript:unitsSelectUnit(1))

浏览器是谷歌浏览器

browser.get("http://eatsmart.housing.illinois.edu/NetNutrition/46#")
browser.find_element_css_selector("a[onclick*=javascript:unitsSelectUnit(1);]").click()
html = browser.page_source
time.sleep(2)
print(html)

# close web browser
browser.close()

【问题讨论】:

    标签: python selenium google-chrome selenium-webdriver selenium-chromedriver


    【解决方案1】:

    要点击文本为 Ikenberry Dining Center (IKE) 的元素,您需要将 WebDriverWait 诱导为 element_to_be_clickable(),您可以使用关注Locator Strategies

    • 使用LINK_TEXT

      driver.get("http://eatsmart.housing.illinois.edu/NetNutrition/46#")
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "New"))).click()
      
    • 使用CSS_SELECTOR

      driver.get("http://eatsmart.housing.illinois.edu/NetNutrition/46#")
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[onclick*='unitsSelectUnit(1)']"))).click()
      
    • 使用XPATH

      driver.get("http://eatsmart.housing.illinois.edu/NetNutrition/46#")
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@onclick, 'unitsSelectUnit(1)')]"))).click()
      
    • 注意:您必须添加以下导入:

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

    【讨论】:

    • 一直在1秒内打开和关闭,我是改20还是休眠时间来帮助保持浏览器打开一段时间。
    • WebDriverWait(driver, 20) 中的 20 就足够了。你有最新的 Chrome/ChromeDriver 吗?
    • 我的意思是,如果我想永久打开它怎么办
    • 也感谢您的帮助,代码已经成功,我在其余的刮板中使用了该方法。
    【解决方案2】:

    这个CSS_SELECTOR

    a[onclick*=javascript:unitsSelectUnit(1);]
    

    您在代码中使用的是错误的。基本上,你错过了''

    CSS_SELECTOR 遵循以下语法

    node_name[attribute_name = 'attribute_value']
    

    您也可以按照以下步骤进行交叉验证:

    检查步骤:

    Press F12 in Chrome -> 转到element 部分 -> 做一个CTRL + F -> 然后粘贴css selector 看看,如果你想要的element 用@ 得到高亮 987654331@匹配节点。

    这个a[onclick*=javascript:unitsSelectUnit(1);] 不会匹配任何东西,而a[onclick*='javascript:unitsSelectUnit(1);'] 将匹配Ikenberry Dining Center (IKE) 节点。

    现在如果你想点击它,请使用下面的代码:

    代码:

    browser.maximize_window()
    wait = WebDriverWait(browser, 30)
    browser.get("http://eatsmart.housing.illinois.edu/NetNutrition/46#")
    
    
    try:
        btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[onclick*='javascript:unitsSelectUnit(1);']")))
        btn.click()
    except:
        print("Could not click on button")
        pass
    

    进口:

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

    【讨论】:

      猜你喜欢
      • 2018-08-16
      • 2022-11-01
      • 2021-04-07
      • 2020-11-06
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多