2016-12-22 4 views
0

настоящее время я использую следующие Python и Selenium версии:питон .click() не работает

Python34 3.4.3 (v3.4.3: 9b73f1c3e601, 24 февраля 2015, 22:43:06) [MSC v 0,1600 32 бит (Intel)]

Селен версия 2.53.2

Я надеюсь, кто-то будет знать ответ на этот вопрос. То, что я пытаюсь достичь, - это перейти на страницу Facebook, прокрутить ее, насколько это возможно, а затем расширить все ссылки «комментарии», «ответы» и «Смотрите еще», которые появляются на странице.

До сих пор я пробовал только ссылки «Смотрите еще», но я не могу обработать его, нажав на ссылку. Я думаю, что мои базовые знания говорят мне, что он находит xpath, поскольку я не получаю ошибку для этого, но я делаю для функции .click, которая вызывается сразу после. Я также пробовал использовать find_element_by_link_text('See More'), однако это не сработало. Мне также удалось найти HTML-структуру, где два примера см Других ссылок, где расположены, однако, поскольку они не были идентичны я не был уверен, как реализовать эти:

//div[3]/div[2]/div/span/span/a/span 
//div[2]/div[2]/div/span/span/a/span 

//div[@id='id_58591b7145b529535706885']/span/span/a/span 
//div[@id='id_58591f8225af12f45796030']/span/span/a/span 

Если у кого есть какие-либо предложения или поправка или альтернативные варианты, то я был бы благодарен им здесь. Заранее спасибо,

import os 
import time 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

#Global Variables 
target = "serena.xxxx.x" 
username = "[email protected]" 
password = "xxxxxxxx" 

#code block to log in user 
def logmein(): 
    search_box = driver.find_element_by_name('email') 
    search_box.send_keys(username) 
    search_box = driver.find_element_by_name('pass') 
    search_box.send_keys(password) 
    search_box.submit() 

driver = webdriver.Firefox() 

driver.get("https://www.facebook.com//") 

logmein() 

elm = driver.find_element_by_tag_name('html') 
elm.send_keys(Keys.END) 
time.sleep(2) 
elm.send_keys(Keys.END) 
time.sleep(2) 
elm.send_keys(Keys.END) 
time.sleep(2) 
elm.send_keys(Keys.END) 
time.sleep(2) 
elm.send_keys(Keys.HOME) 

# Initiates See More Open 
SeeMore = driver.find_element_by_xpath("//a[@class='see_more_link']") 
print("Found See More") 
SeeMore.click() 
print("Expand SeeMore option") 
+0

_ «То, что я пытаюсь достичь, - это перейти на страницу Facebook, прокрутить ее, насколько это возможно, а затем расширить все ссылки« комментарии »,« ответы »и« Смотрите еще », которые появляются на странице. «_ - зачем, в чем цель этого? Если вы хотите взаимодействовать с контентом на Facebook, вы должны использовать их API. Использование любых таких автоматических инструментов явно запрещено их ToS. – CBroe

ответ

1

Помогает ли это?

import os 
import time 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.by import By 

#Global Variables 
target = "..." 
username = "..." 
password = "..." 

def logmein(): 
    search_box = driver.find_element_by_name('email') 
    search_box.send_keys(username) 
    search_box = driver.find_element_by_name('pass') 
    search_box.send_keys(password) 
    search_box.submit() 

driver = webdriver.Firefox() 

driver.get("https://www.facebook.com//") 

logmein() 

SeeMore = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.LINK_TEXT, 'See More...'))) 
print("Found See More") 
time.sleep(2) # apparently there is some javascript execution that requires this sleep to be here. 
SeeMore.click() 
print("Expand SeeMore option") 

Было бы здорово посмотреть скриншот упомянутой ссылки. Таким образом, я мог бы перейти на аналоговую страницу Facebook и убедиться, что она работает.