2017-01-16 5 views
0

Я очень новичок в python, все еще пытаюсь понять все.Наведите указатель мыши на XPath, селен webdriver, хром?

При попытке моей руки в webscraping я попал в проблему:

Сайт требует знака в и всплывающий показывает, как только страница результатов поиска показывает, и иногда во время прокрутки и глядя на результатах. Поэтому мне нужно нажать escape, а затем наведите указатель мыши (или я нажму на него) в раскрывающемся меню «Вход в систему» ​​и нажмите «Войти» в раскрывающемся меню.

Но прямо сейчас, с точки зрения образования, я хотел переместить мышь на элемент, используя его 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() 

И, вы можете использовать «по идентификатору» локатор вместо этого - с помощью XPath для такой простой задачи размещения является чрезмерной сложностью:

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

Если бы еще не работают, вот возможные причины:

+0

Благодаря, оба из вышеизложенного работали. Второй - это то, что я использую сейчас. Теперь, чтобы выяснить, как заменить текст заполнителя, когда я нажимаю знак. Это всплывающее окно, и я могу найти xpath и id, однако я получаю следующую ошибку: 'AttributeError: 'list' объект не имеет атрибута 'send_keys'' – Sid

+0

@Sid вы, вероятно, используете' find_elements_ * '(который возвращает список элементов) вместо 'find_element_ *' (который возвращает один элемент). – alecxe

+0

Спасибо, я сделал эту точную ошибку. Теперь, когда я изменил его, появилась новая ошибка: «Сообщение: неизвестная ошибка: не может сфокусировать элемент». Код, который я использовал 'inputElement = driver.find_element_by_xpath ('// * [@ id =" lfm "]/div [1]/div [2] ') # driver.find_elements_by_xpath ("// * [содержит (текст(),' Введите номер мобильного телефона ')]") # driver.find_element_by_id ("mobile") inputElement.send_keys (' Номер телефона ') вводElement.submit() '. – Sid