2017-01-16 132 views
0

我对python很陌生,仍然试图找出一切。悬停使用XPath,selenium webdriver,chrome?

虽然试图在我的手webscraping我有一个问题:

网站需要登录,并弹出,一旦显示为搜索结果页面显示出来,有时滚动时,看着结果。因此,我需要按下转义键,然后将鼠标悬停在(或者我可以点击它)“登录”下拉菜单上,然后点击下拉菜单中的“登录”。

但是现在,从教育的角度来看,我想使用XPath将鼠标移动到元素。

我做了以下,它不起作用。请指向正确的方向。

from selenium import webdriver 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

chrome_path = r"C:\Users\------\Desktop\chromedriver.exe" 
driver = webdriver.Chrome(chrome_path) 
driver.get("URL of the webnsite I am scraping") #sorry had to remove the link :(
driver.maximize_window() 


#code below this is not working 
action = webdriver.ActionChains(driver) 
action.move_to_element((By.XPATH, '//*[@id="user_sign_in"]')) 



#Tried the ones below and they didn't work either 
#driver.move_to_element(By.XPATH, '//*[@id="user_sign_in"]') 
#login_menu = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//*[@id="user_sign_in"]'))) 

回答

1

你忘了与perform()运用你的行动:

action.move_to_element((By.XPATH, '//*[@id="user_sign_in"]')).perform() 

而且,你可以使用“按ID”定位,而不是 - 使用XPath这种简单的定位问题是过度复杂:

elm = driver.find_element_by_id("user_sign_in") 
action.move_to_element(elm).perform() 

如果这仍然没有工作,这里有可能的原因:

+0

谢谢,以上两者的工作。第二个是我现在使用的。现在要弄清楚当我点击登录时如何替换占位符文本。它在弹出窗口中,我可以找到xpath和id,但是我得到以下错误:'AttributeError:'list'object has no attribute'send_keys'' – Sid

+0

@Sid您可能正在使用'find_elements_ *'(它返回元素列表)而不是'find_element_ *'(它返回一个元素)。 – alecxe

+0

谢谢,我正在犯这个确切的错误。现在我改变它有一个全新的错误:'消息:未知错误:不能聚焦元素'我使用的代码'inputElement = driver.find_element_by_xpath('// * [@ id =“lfm”]/div [1] /输入您的手机号码))“)#driver.find_element_by_id(”mobile“) inputElement.send_keys('Phone Number' ) inputElement.submit()'。 – Sid

相关问题