标签: webdriverwait

selenium.common.exceptions.ElementNotInteractableException:消息:尝试使用 Selenium 和 Python 登录时元素不可交互错误

我正在尝试https://www.ecobolsa.com/index.html在 python3中使用 Selenium登录,但是 send_keys 函数给了我消息:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: headless chrome=78.0.3904.97)
Run Code Online (Sandbox Code Playgroud)

代码是:

from selenium.webdriver.chrome.options import Options
from selenium import webdriver

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")

email = 'fake@gmail.com'
password = 'fakepass3'

driver = webdriver.Chrome('chromedriver', options=options)

driver.get('https://www.ecobolsa.com/index.html')

driver.find_element_by_id("userNameTextBox").send_keys(email)
driver.find_element_by_id("password_login").send_keys(password)
Run Code Online (Sandbox Code Playgroud)

我尝试了其他解决方案,但没有一个成功。我需要帮助。

selenium python-3.x selenium-chromedriver selenium-webdriver webdriverwait

3
推荐指数
1
解决办法
989
查看次数

如何使用 Selenium 和 Python 更改日期选择器的值

在一个table元素中,我有以下日期选择器:

<input name="tb_date" type="text" value="2020-07-15" onchange="javascript:setTimeout('__doPostBack(\'tb_date\',\'\')', 0)" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;" id="tb_date" class="align-center" style="font-size:14pt;width:120px;">
Run Code Online (Sandbox Code Playgroud)

我可以按如下方式获取输入元素:

date_element = driver.find_element_by_name('tb_date')
Run Code Online (Sandbox Code Playgroud)

没事儿。但是当我尝试更改此元素的值时,它似乎会附加到当前值。

date_element.send_keys('2020-07-01')
date_element.click()
Run Code Online (Sandbox Code Playgroud)

所以日期选择器的值为'2020-07-152020-07-01'

如何删除 value 属性并输入新的值?

python selenium datepicker dopostback webdriverwait

3
推荐指数
1
解决办法
5281
查看次数

如何避免每次使用 Selenium 和 Python 时都出现 Instagram 登录页面

我正在尝试制作一个 selenium instagram 脚本。我的问题是我每次都必须登录我的帐户。

\n

如果我使用普通的谷歌浏览器,只需登录一次就足够了。当 \xc4\xb1 打开 Chrome 时,它​​始终保持登录状态。但 Chrome 驱动程序总是要求登录。

\n
from selenium import webdriver\nimport time\nimport random\nfrom selenium.webdriver.common.by import By\nimport kullaniciBilgileri as kb\nimport os.path\nfrom pathlib import Path\nfrom selenium.webdriver.chrome.options import Options\nimport collections\n\noptions = Options()\noptions.add_experimental_option('useAutomationExtension', False)\nlink = "http://www.instagram.org"\nbrowser = webdriver.Chrome(options=options, executable_path="./chromedriver")\nbrowser.get(url=link)\ntime.sleep(10)\nusername = browser.find_element(by=By.NAME, value=("username"))\npassword = browser.find_element(by=By.NAME, value=("password"))\nusername.send_keys(kb.userName)\npassword.send_keys(kb.password)\nloginBtn = browser.find_element(by=By.CSS_SELECTOR, value=("#loginForm > div > div:nth-child(3) > button > div"))\n                               \nloginBtn.click()\n
Run Code Online (Sandbox Code Playgroud)\n

有什么建议吗?

\n

python cookies selenium pickle webdriverwait

3
推荐指数
1
解决办法
1412
查看次数

如何通过 Selenium 正确配置隐式/显式等待和 pageLoadTimeout?

我目前有以下设置,但我不确定我的等待(隐式和 pageLoadTimeout)是否有效。这是正确的实现吗?通过将它放在@Before("@setup") 中,它是否适用于每个场景或步骤定义运行?每次我打电话给@Given、@When.. 等时,司机会相应地等待吗?

@Before("@setup")
    public void setUp() {

        driver.manage().deleteAllCookies();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);


    }
Run Code Online (Sandbox Code Playgroud)

为什么需要给下面的wait分配一个WebElement,WebElement元素接收什么?这是正确的实现吗?——

 WebDriverWait wait = new WebDriverWait(driver, 30);
 WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(id)));
boolean status = element.isDisplayed();
Run Code Online (Sandbox Code Playgroud)

java selenium page-load-time webdriverwait implicitwait

2
推荐指数
1
解决办法
3421
查看次数

在 Selenium Python 中使用 Keys.PAGE_DOWN 滚动

你好每个人都可以帮助我滚动https://www.grainger.com/category/black-pipe-fittings/pipe-fittings/pipe-tubing-and-fittings/plumbing/ecatalog/N-qu1?searchRedirect=产品

我想滚动这个使用

actions = ActionChains(browser)
actions.send_keys(Keys.PAGE_DOWN)
actions.perform()
Run Code Online (Sandbox Code Playgroud)

直到它到达滚动的底部,在那里它会找到一个元素“加载更多”

loadMoreButton = browser.find_element_by_css_selector(
                        ".btn.list-view__load-more.list-view__load-more--js")
loadMoreButton.click()
Run Code Online (Sandbox Code Playgroud)

然后庞塞单击加载更多按钮,它必须再次执行滚动操作,然后再次执行加载更多操作,直到加载更多按钮不可用。

我必须使用此页面向下操作,因为在页面滚动到元素之前元素不会加载,如果有人可以提出一些解决方案将有很大帮助

python lazy-loading web-scraping selenium-webdriver webdriverwait

2
推荐指数
1
解决办法
5987
查看次数

JMeter Webdriver 采样器中的等待时间问题

我正在使用 JMeter Webdriver 采样器进行应用程序 UI 响应时间测量。我正面临等待功能的问题。例如,登录页面的加载时间在 10 到 120 秒之间。所以我有以下代码用于 Webdriver 采样器中的登录页面,用于页面加载检查。

var ui=JavaImporter(org.openqa.selenium.support.ui) 
var wait=new support_ui.WebDriverWait(WDS.browser,120)
wait.until(ui.ExpectedConditions.visibilityOfElementLocated(pkg.By.className('logout-btn-hover')))
Run Code Online (Sandbox Code Playgroud)

问题是即使在页面完全加载后,JMeter 仍在等待执行下一个操作。如果我减少 120 秒,这个等待时间会减少。但有时应用程序也需要 120 秒才能加载,所以我需要保持 120 秒。

一旦采样器完成其操作,我就会将时间写入日志文件。由于等待时间问题,我无法正确计算时间。

webdriver jmeter webdriverwait

2
推荐指数
1
解决办法
8148
查看次数

如何修复 AttributeError:“NoneType”对象没有属性“click”

如何解决错误AttributeError: \'NoneType\' object has no attribute \'click\'?它的失败在于self.home.get_you_button().click(). 当我没有创建页面对象类时,它\xe2\x80\x99s 工作正常...它单击“You”按钮,没有任何错误,但通过使用 POM,它\xe2\x80\x99s 失败。网址是https://huew.co/

\n\n

代码试验:

\n\n
from selenium.webdriver.support import expected_conditions\nfrom selenium.webdriver.support.wait import WebDriverWait\n\nclass HomePage():\n\n    def __init__(self,driver):\n        self.driver = driver\n\n    def wait_for_home_page_to_load(self):\n        wait =WebDriverWait(self.driver,30)\n        wait.until(expected_conditions.visibility_of(self.driver.find_element_by_tag_name(\'html\')))\n\n    def get_you_button(self):\n\n        try:\n            element = self.driver.find_element_by_xpath("//div[@class=\'desktop-public-header\']/a[@ng-controller=\'UserNavigationInteractionCtrl\'][6]")\n\n        except:\n            return None\n
Run Code Online (Sandbox Code Playgroud)\n

python selenium python-3.x selenium-webdriver webdriverwait

2
推荐指数
1
解决办法
2万
查看次数

selenium 将两个 xpath 测试合二为一

我尝试结合检查两种情况:

如果启动检查失败,我们会看到重试按钮:

el = WebDriverWait(self.driver, 10).until(
  EC.element_to_be_clickable((By.NAME, "Try again")))
Run Code Online (Sandbox Code Playgroud)

或者启动检查成功,我们在自定义对象中收到 pin 输入请求:

el = WebDriverWait(self.driver, 20).until(
  EC.element_to_be_clickable((By.XPATH, "//Custom/Edit")))
Run Code Online (Sandbox Code Playgroud)

如何将其合并为一项检查而不必同时检查两者:我尝试了以下方法:

check = WebDriverWait(self.driver, 20).until(
  EC.element_to_be_clickable(
    (By.XPATH, "//Custom/Edit") or (By.NAME, "Try again")
))
Run Code Online (Sandbox Code Playgroud)

但只or检查第一个语句。

python selenium xpath css-selectors webdriverwait

2
推荐指数
1
解决办法
1740
查看次数

如何使用 Selenium 和 Python 与 reCAPTCHA 音频元素交互

我想,点击按钮通过音频解析验证码,但是selenium没有检测到指定的“id”。

browser.get("https://www.google.com/recaptcha/api2/demo")
mainWin = browser.current_window_handle  
iframe = browser.find_elements_by_tag_name("iframe")[0]
browser.switch_to_frame(iframe)
CheckBox = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID ,"recaptcha-anchor"))).click()
sleep(4)
audio = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID ,"recaptcha-audio-button"))).click()
Run Code Online (Sandbox Code Playgroud)

python iframe selenium recaptcha webdriverwait

2
推荐指数
1
解决办法
9111
查看次数

Python Selenium:等待元素可点击 - 使用 find_elements 找到元素

我正在构建一个网络抓取工具,它循环访问地址列表并在房地产网站上搜索它们。然后,它会根据我们已经了解的有关房产的信息更新一些下拉列表,然后再抓取各种信息,例如预期租金收益率。

搜索完每个地址后,可能需要一些时间才能将所需元素(例如“bathrooms_dropdown”)加载到网站上。我一直在使用它来管理它,time.sleep(x)但这很慢且不可靠,并且implictly_wait(60)似乎没有任何效果,因为我仍然经常收到“元素不存在/无法找到”错误。

我确信我需要实现 WebDriverWait,但在将其实现到我的代码中时无法计算出语法。我还没有看到任何与此结合使用的例子driver.find_elements()

任何帮助将不胜感激!

driver.get(url)
driver.implicitly_wait(60)   

# find search bar and search for address
searchBar = driver.find_element(by = By.ID, value = 'react-select-3-input')
searchBar.send_keys(address)
searchButton = driver.find_element(By.CLASS_NAME, value='sc-1mx0n6y-0').click()

# wait for elements to load
time.sleep(3) # REPLACE THIS

# find dropdown and click to open it
bathrooms_dropdown = driver.find_elements(By.CLASS_NAME, value = 'css-19bqh2r')[-2]
bathrooms_dropdown.click()  
Run Code Online (Sandbox Code Playgroud)

python selenium selenium-webdriver webdriverwait expected-condition

2
推荐指数
1
解决办法
6516
查看次数