我正在尝试单击具有以下源的页面上的Upload from my Computer
按钮。
我正在使用硒并尝试了几种不同的方法。过去失败的方法在下面被注释,以及当前失败的方法。使用当前方法返回的错误如下。
任何人都可以看到问题可能是什么,并建议如何解决它?我是selenium的新手,所以如果有人可以提供一些关于html正在做什么以及他们的代码如何解决问题的解释,那对我的理解真的很有帮助。
按钮的HTML代码:
<div class="hidden-xs">
<label for="fuUploadFromMyComputer" class="hidden">
Upload from my Computer
</label>
<input id="fuUploadFromMyComputer" type="file" name="upload">
<button id="btnUploadFromMyComputer"
class="center-block btn btn-white-fill btn-block "
data-resume-type="COMPUTER" type="submit">
<i class="zmdi zmdi-desktop-mac"></i>
Upload from my Computer
</button>
</div>
尝试:
# clicking upload button
# upload_btn = driver.find_element_by_id("fuUploadFromMyComputer")
# upload_btn = driver.find_element_by_css_selector(
# '.center-block.btn.btn-white-fill.btn-block')
# upload_btn = driver.find_element_by_link_text('Upload from my Computer')
# upload_btn.click()
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, "div.center-block btn.btn-white-fill.btn-block"))).click()
错误:
---------------------------------------------------------------------------
TimeoutException Traceback (most recent call last)
<ipython-input-43-8fd80ff3c690> in <module>()
14 from selenium.webdriver.support import expected_conditions as EC
15
---> 16 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.center-block btn.btn-white-fill.btn-block"))).click()
17
18 time.sleep(3)
~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/support/wait.py in until(self, method, message)
78 if time.time() > end_time:
79 break
---> 80 raise TimeoutException(message, screen, stacktrace)
81
82 def until_not(self, method, message=''):
TimeoutException: Message:
要单击带有文本的元素作为从我的计算机上载,您需要引导WebDriverwait使元素可单击,您可以使用以下任一解决方案:
CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.center-block.btn.btn-white-fill.btn-block#btnUploadFromMyComputer"))).click()
XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='center-block btn btn-white-fill btn-block ' and @id='btnUploadFromMyComputer']"))).click()
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Selenium的click()
不支持对隐形元素进行操作。因此,当您的代码打算单击它时,请仔细确认该按钮是否可见。
如果按钮不可见,您如何亲自点击它?因此,更改脚本以遵循人工步骤,使按钮可见,然后单击它。
在下面的代码中回到你的失败
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, "div.center-block btn.btn-white-fill.btn-block"))).click()
原因是你给了一个错误的css选择器,它找不到页面util中的任何元素到达等待超时。
按钮的正确css选择器可以是以下任何一种:
对于C#,我使用IJavaScriptExecutor单击元素。您可以在此解决方案中搜索Python语法
public static void scrollElementToClick(IWebDriver driver, IWebElement element)
{
IJavaScriptExecutor ex = (IJavaScriptExecutor)driver;
ex.ExecuteScript("arguments[0].click();", element);
}