【问题标题】:Why Cant I Click an Element in Selenium using python and Chrome Webdriver?为什么我不能使用 python 和 Chrome Webdriver 在 Selenium 中单击一个元素?
【发布时间】:2016-06-21 07:39:05
【问题描述】:

我使用 Selenium-python 抓取 this page 并点击分页号。

我试试这个:

driver = webdriver.Chrome()
time.sleep(5)
driver.get(
    'http://www.ooshop.com/courses-en-ligne/ContentNavigation.aspx?TO_NOEUD_IDMO=N000000013081&FROM_NOEUD_IDMO=N000000013056&TO_NOEUD_IDFO=81018&NOEUD_NIVEAU=2&UNIVERS_INDEX=2')
nbdespages = 23

for i in xrange(2,nbdespages):
    time.sleep(10)
    number = str(i)
    if(i<10):
        cssSelec = 'ctl00_cphC_pn3T1_ctl01_rptPaginationB_ctl0%s_lbPage' %number
    else:
        cssSelec = 'ctl00_cphC_pn3T1_ctl01_rptPaginationB_ctl%s_lbPage' %number
    try:
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        element = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR, cssSelec)))
        driver.execute_script("arguments[0].click()", element)
        driver.find_element_by_css_selector(cssSelec).click()
    finally:
        driver.save_screenshot('/Users/Parik/Desktop/test.jpg')
        print "TRY Again, you will find"

但我得到了这个例外:

TimeoutException: Message: 

我使用 WebDriverWait 因为有时如果我不使用它会出现此错误,我会阅读 this question 并将其用于我的问题:

 Element is not clickable at point 

css选择器的值是正确的

POST http://127.0.0.1:51099/session/ddf78c5a19e720909cbe6a0f5408788e/element {"using": "css selector", "sessionId": "ddf78c5a19e720909cbe6a0f5408788e", "value": "ctl00_cphC_pn3T1_ctl01_rptPaginationB_ctl02_lbPage"}

UPADTE1

更新 2

通过屏幕截图,我看到我看不到数字,我将代码更改为:

    try:
        element = driver.find_element_by_css_selector('img#ctl00_cphC_pn3T1_ctl01_rp_ctl15_ctl00_iVisu.image')
        driver.execute_script("return arguments[0].scrollIntoView();", element)
        driver.execute_script("arguments[0].click()", element)
        driver.find_element_by_css_selector(cssSelec).click()
    finally:
        driver.save_screenshot('/Users/Parik/Desktop/test.jpg')
        print "TRY Again, you will find"

现在我看到了分页

但我总是有这个例外:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"ctl00_cphC_pn3T1_ctl01_rptPaginationB_ctl02_lbPage"}
  (Session info: chrome=51.0.2704.103)
  (Driver info: chromedriver=2.21.371459 (36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform=Mac OS X 10.11.5 x86_64)

【问题讨论】:

  • 我认为首先你需要向下滚动以使分页数可见。这样做,让我知道会发生什么……如果可以,我会将其转换为答案。
  • 您需要执行javascript 来执行像这样的点击driver.execute_script("arguments[0].click();",element)....希望它会起作用..
  • @noor 我更新了我的代码,但我遇到了同样的问题
  • @SaurabhGaur 我添加了滚动,但没有帮助
  • @parik..ok 忘记一切...就像这样使用try:driver.execute_script("document.getElementById(arguments[0]).click();", cssSelec)..

标签: python selenium selenium-webdriver web-scraping selenium-chromedriver


【解决方案1】:

您应该尝试.execute_script 执行如下点击:-

try:driver.execute_script("document.getElementById(arguments[0]).click();", cssSelec)

您也可以尝试如下:-

try:
element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, cssSelec))
)
driver.execute_script("arguments[0].click()", element)

注意:-您正在为id 准备定位器,但使用By.CSS_SELECTOR 来查找元素,因此您会收到NoSuchElementException 的异常,因此将其更改为@987654327 @。

你也可以使用element.click(),但如果你得到Exception就像Element is not clickable at point一样,我建议你可以在这里使用driver.execute_script("arguments[0].click()", element)来执行click

希望对你有帮助..:)

【讨论】:

    【解决方案2】:

    cssSelec = 'ctl00_cphC_pn3T1_ctl01_rptPaginationH_ctl0%s_lbPage' %numbercssSelec = 'ctl00_cphC_pn3T1_ctl01_rptPaginationH_ctl%s_lbPage' %number 指的是您尝试单击的元素的 ID,它们本身不是适用的 CSS 选择器 - 您可以使用 # 在 CSS 选择器中使用它们像这样的符号:

    a#ctl00_cphC_pn3T1_ctl01_rptPaginationH_ctl02_lbPage

    您可以用来定位和单击元素的另一种方法是使用 WebDriver 的链接文本定位器,​​因为这些元素是锚(&lt;a&gt; 标记)元素。

    我强烈建议您避免使用 Javascript 来单击元素,因为这充其量是一种黑客行为,并且会在您的测试中打开 Javascript 错误的可能性。

    【讨论】:

    • 我添加了一个#,但我得到了这个错误:WebDriverException:消息:未知错误:元素在点 (151, 8) 是不可点击的。其他元素会收到点击:
      ...
      (会话信息:chrome=51.0.2704.103)(驱动程序信息:chromedriver=2.21.371459(36d3d07f660ff2bc1bf28a75d1cdbed0983e7c4),平台=Mac OS X 10.11.5 x86_64)
    猜你喜欢
    • 2013-05-06
    • 2020-08-06
    • 2012-08-21
    • 1970-01-01
    • 2016-01-18
    • 2015-09-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多