我正在尝试使用python中的selenium模块编写一个自动登录ebay的脚本。
我可以在firefox中启动登录页面。这是代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
driver = webdriver.Firefox(capabilities=firefox_capabilities)
driver.get("https://signin.ebay.in/ws/eBayISAPI.dll?SignIn&ru=http%3A%2F%2Fwww.ebay.in%2F")
search_field = driver.find_element("Email or username")
search_field.clear()
search_field.send_keys("My username")
但这似乎不起作用。我不能用
find_element_by_id
因为id不断动态变化。
<input size="40" maxlength="64" name="147630419" id="147630419" autocapitalize="off" autocorrect="off" placeholder="Email or username" class="fld" type="text">
这就是电子邮件的占位符。密码的占位符也类似。 “name”和“id”动态变化。
我怎样才能解决这个问题?
答案 0 :(得分:1)
我对var map = new Map([["a", 1], ["b", 2]])
var obj = {}
var arr = [...map]
arr.forEach(e => obj[e[0]] = e[1]);
console.log(obj)
的用法不太确定,但我认为在driver.find_element()
中你需要传递用户名字段的定位符(例如:xPath),而不是占位符字符串格式的输入字段。
用户名字段的xPath是driver.find_element()
,请尝试:
"(//input[@placeholder='Email or username'])[2]"
<强>更新强>
密码字段的xPath是driver.find_element_by_xpath("(//input[@placeholder='Email or username'])[2]")
答案 1 :(得分:1)
因为id正在动态改变,所以转到xpath。试试这段代码。它的工作原理
driverInstance.find_element_by_xpath(".//*[@id='pri_signin']/div[4]/span[2]/input").send_keys("Hello")
答案 2 :(得分:1)
您错误地使用find_element()
方法,因为您应该传递2个参数:by
和value
。
您可以尝试以下代码行:
driver.find_element("css", "input:not(#userid)[placeholder='Email or username']").send_keys("My username")
但最好使用@Jayesh Doolani提出的适当find_element_by_...()
方法(+1)