无法切换到帧——不断出现 AttributeError
Cannot switchTo frames -- keep getting AttributeError
我第一次 posting。对于任何失误,我提前表示歉意。
我正在 Python 中写作,使用 Selenium,试图从一些网页中抓取一些信息。
经过两天的搜索-尝试-搜索,我似乎无法解决这个难题。
我的问题是这样的;在尝试登录网站 w/Selenium/Python 时,我无法 'find element' 登录。经过多次搜索,我意识到我可能需要切换框架才能找到该元素。我尝试了 switchTo
(或 switch_to)命令的许多不同方式——我不断收到消息
"Attribute error: SwitchTo instance has no call method".
我会post最近的尝试(如果我能提供任何进一步的信息,请告诉我):
在硒中:
waitUntilReady(browser)
browser.switch_to().frame(browser.findElement(By.ID("iframe[id='credentials']")))
elem = WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.NAME, "Ecom_User_ID")))
elem = browser.find_element_by_name("Ecom_User_ID")
elem.send_keys("frustrated")
返回的内容(在终端中):
File "someproj.py", line 56, in
browser.switch_to().frame(browser.findElement(By.ID("iframe[id='credentials']")))
AttributeError: SwitchTo instance has no call method
html 表单网站:
<!DOCTYPE html>
<html lang="en" webdriver="true">
<head></head>
<body onload="onloadhandler()">
<div class="m-header"></div>
<div class="container">
<div class="header"></div>
<div class="ten columns">
<h2></h2>
<iframe id="loginsubtab" height="375" frameborder="0" width="100%" src="/nidp/jsp/content.jsp?sid=0&id=289&sid=0" scrolling="no">
#document
<!DOCTYPE html>
<html lang="en" webdriver="true">
<head></head>
<body onload="onloadhandler('selectedCard')">
<div id="content">
<table border="0" width="100%">
<tbody>
<tr>
<td>
<iframe id="credentials" height="375" frameborder="0" width="100%" src="/nidp/saml2/sso?id=289&sid=0&option=credential&sid=0" scrolling="no">
#document
非常感谢任何想法或指导!!!
您使用了错误的选择器。您使用的选择器是 cssSelector 但不是 id
waitUntilReady(browser)
# or use id as follows
# browser.switch_to.frame(browser.findElement(By.ID, 'credentials'))
#browser.switch_to.frame(browser.find_element_by_id('credentials'))
browser.switch_to.frame(browser.findElement(By.CSS_SELECTOR, "iframe[id='credentials']"))
elem = WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.NAME, "Ecom_User_ID")))
elem = browser.find_element_by_name("Ecom_User_ID")
elem.send_keys("frustrated")
首先,这看起来不对:
browser.findElement(By.ID("iframe[id='credentials']"))
由于您要按 ID 查找元素,因此不需要包含 iframe[id="..."]
尝试:
browser.findElement(By.ID('credentials'))
我第一次 posting。对于任何失误,我提前表示歉意。
我正在 Python 中写作,使用 Selenium,试图从一些网页中抓取一些信息。
经过两天的搜索-尝试-搜索,我似乎无法解决这个难题。
我的问题是这样的;在尝试登录网站 w/Selenium/Python 时,我无法 'find element' 登录。经过多次搜索,我意识到我可能需要切换框架才能找到该元素。我尝试了 switchTo
(或 switch_to)命令的许多不同方式——我不断收到消息
"Attribute error: SwitchTo instance has no call method".
我会post最近的尝试(如果我能提供任何进一步的信息,请告诉我):
在硒中:
waitUntilReady(browser)
browser.switch_to().frame(browser.findElement(By.ID("iframe[id='credentials']")))
elem = WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.NAME, "Ecom_User_ID")))
elem = browser.find_element_by_name("Ecom_User_ID")
elem.send_keys("frustrated")
返回的内容(在终端中):
File "someproj.py", line 56, in browser.switch_to().frame(browser.findElement(By.ID("iframe[id='credentials']"))) AttributeError: SwitchTo instance has no call method
html 表单网站:
<!DOCTYPE html>
<html lang="en" webdriver="true">
<head></head>
<body onload="onloadhandler()">
<div class="m-header"></div>
<div class="container">
<div class="header"></div>
<div class="ten columns">
<h2></h2>
<iframe id="loginsubtab" height="375" frameborder="0" width="100%" src="/nidp/jsp/content.jsp?sid=0&id=289&sid=0" scrolling="no">
#document
<!DOCTYPE html>
<html lang="en" webdriver="true">
<head></head>
<body onload="onloadhandler('selectedCard')">
<div id="content">
<table border="0" width="100%">
<tbody>
<tr>
<td>
<iframe id="credentials" height="375" frameborder="0" width="100%" src="/nidp/saml2/sso?id=289&sid=0&option=credential&sid=0" scrolling="no">
#document
非常感谢任何想法或指导!!!
您使用了错误的选择器。您使用的选择器是 cssSelector 但不是 id
waitUntilReady(browser)
# or use id as follows
# browser.switch_to.frame(browser.findElement(By.ID, 'credentials'))
#browser.switch_to.frame(browser.find_element_by_id('credentials'))
browser.switch_to.frame(browser.findElement(By.CSS_SELECTOR, "iframe[id='credentials']"))
elem = WebDriverWait(browser, 60).until(EC.presence_of_element_located((By.NAME, "Ecom_User_ID")))
elem = browser.find_element_by_name("Ecom_User_ID")
elem.send_keys("frustrated")
首先,这看起来不对:
browser.findElement(By.ID("iframe[id='credentials']"))
由于您要按 ID 查找元素,因此不需要包含 iframe[id="..."]
尝试:
browser.findElement(By.ID('credentials'))