使用 selenium 抓取内容不起作用
scraping content using selenium not working
我正在尝试使用 selenium 登录 this website。所以我导入了网络驱动程序,为了将登录信息发送到该页面,我还导入了密钥。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
这是我用来准备硒的,
chromedriver = "chromedriver.exe"
browser = webdriver.Chrome(chromedriver)
browser.get("https://m.adidas.com/us/myaccount-create-or-login")
我使用“隐式等待功能”让浏览器等待页面加载
网站用户名栏有HTML这样的内容,
<input type="text" value="" placeholder="* EMAIL" data-placeholder="* Email" maxlength="50" class="textinput required trimspace" name="username" id="username">
密码有
<input type="password" placeholder="* PASSWORD" data-placeholder="* Password" maxlength="50" autocomplete="off" name="password" value="" class="textinputpw required" id="password">
我用上面的代码找到了两个元素的id,然后我写了这段代码来发送个人信息
username1 = browser.find_element_by_id("username")
password1 = browser.find_element_by_id("password")
username1.send_keys(email.get()) # Used a gui entry box so why email.get()
password1.send_keys(password.get())
但是上面的代码没有发送信息我不知道为什么?你能帮我解决这个问题吗?
我也尝试过使用 x 路径发送密钥。打印页面源以检查网站是否产生 403 访问被拒绝错误,但我的情况并非如此。
我是新手,如有不妥,敬请谅解
编辑 :- 我的尝试:
username1 = browser.find_element_by_id("username")
browser.switch_to.frame(username1)
password1 = browser.find_element_by_id("password")
browser.switch_to.frame(password1)
username1.send_keys(email.get()) # Used a gui entry box so why email.get()
password1.send_keys(password.get())
您要访问的元素在 IFRAME
.
中
<iframe id="loginaccountframe" class="sso-iframe" src="https://cp.adidas.com/web/eCom/en_US/loadsignin?target=account" frameborder="0" scrolling="no"></iframe>
您需要切换到 IFRAME 才能看到它们。
http://selenium-python.readthedocs.io/navigating.html#moving-between-windows-and-frames
其实@JeffC是对的,还有一个iframe
。因此,在 iframe
中找到元素之前,您必须切换 iframe
.
正如您在评论中提到的那样:-
I have tried adding browser.switch_to.frame(username1)
您实际上将 username1
元素切换为假设的 iframe
元素,这是错误的。
您需要将 iframe
元素与您尝试查找的其他元素分开查找,然后切换到该 iframe 元素。但是在这里您可以使用它的 id
切换到 iframe
,如下所示:-
browser.switch_to.frame("loginaccountframe")
#now do your login stuff inside iframe
username1 = browser.find_element_by_id("username")
username1.send_keys(email.get()) # Used a gui entry box so why email.get()
password1 = browser.find_element_by_id("password")
password1.send_keys(password.get())
#now after doing all stuff inside iframe you need to switch back to default content for further steps
browser.switch_to.default_content()
我正在尝试使用 selenium 登录 this website。所以我导入了网络驱动程序,为了将登录信息发送到该页面,我还导入了密钥。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
这是我用来准备硒的,
chromedriver = "chromedriver.exe"
browser = webdriver.Chrome(chromedriver)
browser.get("https://m.adidas.com/us/myaccount-create-or-login")
我使用“隐式等待功能”让浏览器等待页面加载
网站用户名栏有HTML这样的内容,
<input type="text" value="" placeholder="* EMAIL" data-placeholder="* Email" maxlength="50" class="textinput required trimspace" name="username" id="username">
密码有
<input type="password" placeholder="* PASSWORD" data-placeholder="* Password" maxlength="50" autocomplete="off" name="password" value="" class="textinputpw required" id="password">
我用上面的代码找到了两个元素的id,然后我写了这段代码来发送个人信息
username1 = browser.find_element_by_id("username")
password1 = browser.find_element_by_id("password")
username1.send_keys(email.get()) # Used a gui entry box so why email.get()
password1.send_keys(password.get())
但是上面的代码没有发送信息我不知道为什么?你能帮我解决这个问题吗?
我也尝试过使用 x 路径发送密钥。打印页面源以检查网站是否产生 403 访问被拒绝错误,但我的情况并非如此。
我是新手,如有不妥,敬请谅解
编辑 :- 我的尝试:
username1 = browser.find_element_by_id("username")
browser.switch_to.frame(username1)
password1 = browser.find_element_by_id("password")
browser.switch_to.frame(password1)
username1.send_keys(email.get()) # Used a gui entry box so why email.get()
password1.send_keys(password.get())
您要访问的元素在 IFRAME
.
<iframe id="loginaccountframe" class="sso-iframe" src="https://cp.adidas.com/web/eCom/en_US/loadsignin?target=account" frameborder="0" scrolling="no"></iframe>
您需要切换到 IFRAME 才能看到它们。
http://selenium-python.readthedocs.io/navigating.html#moving-between-windows-and-frames
其实@JeffC是对的,还有一个iframe
。因此,在 iframe
中找到元素之前,您必须切换 iframe
.
正如您在评论中提到的那样:-
I have tried adding browser.switch_to.frame(username1)
您实际上将 username1
元素切换为假设的 iframe
元素,这是错误的。
您需要将 iframe
元素与您尝试查找的其他元素分开查找,然后切换到该 iframe 元素。但是在这里您可以使用它的 id
切换到 iframe
,如下所示:-
browser.switch_to.frame("loginaccountframe")
#now do your login stuff inside iframe
username1 = browser.find_element_by_id("username")
username1.send_keys(email.get()) # Used a gui entry box so why email.get()
password1 = browser.find_element_by_id("password")
password1.send_keys(password.get())
#now after doing all stuff inside iframe you need to switch back to default content for further steps
browser.switch_to.default_content()