目标是單擊登入頁面上的複選框。
我通過XPATH找到了元素,但是無法單擊它。
>>> elem = driver.find_element_by_xpath("//input[@type='checkbox'][@name='conditions']")
>>> elem.is_displayed()
False
>>> elem.is_enabled()
True
>>> elem.get_attribute('outerHTML')
u''
當我嘗試elem.click()時,發生異常:
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible但元素清晰可見,因為頁面已加載并且我在終端上工作。
使用其他選擇器時的其他錯誤是:
driver.find_element_by_xpath('/html/body/div[2]/main/section/div/div[3]/div/div[1]/form/p[1]/label/input').click()
selenium.common.exceptions.WebDriverException: Message: unknown error: Element is not clickable at point (51, 549). Other element would receive the click: ...
我嘗試注入JavaScript,但是沒有用。
driver.execute_script("arguments[0].style.visibility = 'visible';",elem)
任何想法如何解決這個問題?
參考方案
根據您嘗試時的代碼試用:
elem.click()
您正在看到:
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
這意味着所需的元素在HTML DOM中仍然不可見
甚至在嘗試點選之前,也可以:
elem.is_displayed()
您正在看到:
False
但是當您嘗試:
elem.is_enabled()
您正在看到:
True
是以,結合所有這些觀察結果,可能是以下兩種情況之一:
元素存在于DOM中,但仍然不可見/不可互動。在這種情況下,您需要引發WebDriverWait,然後按以下方式調用click():
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@type='checkbox' and @name='conditions']"))).click()
元素存在于DOM中,但不在Viewport中。在這種情況下,您需要調用execute_script()将元素帶入視口,然後按如下所示調用click():
elem = driver.find_element_by_xpath("//input[@type='checkbox' and @name='conditions']")
driver.execute_script("arguments[0].scrollIntoView(true);", elem)
elem.click()
您采用的“定位器政策”有可能不是唯一的,并且會辨別多個WebElement,并且要辨別的第一個元素可能會被隐藏。在這種情況下,is_displayed()将始終傳回False,并且您必須構造一個唯一的定位器政策,該政策可以唯一地辨別預期的元素。
元素的樣式屬性可能設定為顯示:在這種情況下,您必須使用execute_script()方法,如下所示:
elem = driver.find_element_by_xpath("//input[@type='checkbox' and @name='conditions']")
driver.execute_script("arguments[0].removeAttribute('style')", elem)
elem.click()
Selenium:如何使RemoteDriver始終附加到目前的浏覽器頁籤? - javascript
我正在開發一個Windows應用程式,該應用程式可以通過語音指令操縱浏覽器。我想适當地處理使用者添加一些标簽并根據需要更改所選标簽的情況。事實證明,RemoteDriver僅與一個頁籤一起使用,并且可以通過提供頁籤搖桿将焦點切換到另一個頁籤。但是我不知道如何擷取標明的頁籤句柄并始終檢查標明的頁籤是否已更改,或者是否存在始終與標明的頁籤一起使用的方法…Selenium:在進行JavaScript調用時無需點選即可獲得最終的href /連結 - javascript
我正在抓取一長串的html連結(在ToS下允許)。但是,所有連結都是javascript調用(href =“ javascript :;”),是以使用get_attribute()擷取連結将不起作用。我不想實際單擊所有連結,因為它會為每個連結下載下傳一個較大的pdf檔案是否有可能獲得最終調用的href /連結,而無需實際單擊連結并下載下傳檔案?謝謝! 參考方案 是的…使用IJavaScriptExecutor時如何挂鈎自定義JavaScript觸發器 - javascript
我們在Web應用程式中定義了此事件,該事件建立了一個名為timelineEventClicked的自定義觸發器canvas.addEventListener('click', function (evt) { evt.stopImmediatePropagation(); var mousePos = getMousePos(canvas…如果我得到url(''),我該如何使用另一個URL - javascript
我是新手,正在寫這篇文章,但是如果源上沒有圖像,那麼我隻有空白。有人可以告訴我,如果我正在擷取背景圖像,如何擷取/images/no-image.jpg:url();這是我的代碼: