使用selenium python

时间:2017-04-05 13:51:44

标签: python selenium

我正在尝试使用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”动态变化。

我怎样才能解决这个问题?

3 个答案:

答案 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个参数:byvalue

您可以尝试以下代码行:

driver.find_element("css", "input:not(#userid)[placeholder='Email or username']").send_keys("My username")

但最好使用@Jayesh Doolani提出的适当find_element_by_...()方法(+1)