【问题标题】:How to make comment on facebook post using selenium如何使用硒对 Facebook 帖子发表评论
【发布时间】:2015-08-26 12:16:49
【问题描述】:
public class testngprj {
  public String baseurl="https://www.facebook.com/"; 
  public WebDriver dv= new FirefoxDriver(); 

  @Test (priority=0) public void gettitleverified() { 
    String expectedTitle="Facebook - Log In or Sign Up"; 
    String actualtitle=dv.getTitle(); 
    AssertJUnit.assertEquals(expectedTitle, actualtitle); 
  } 

  @Test (priority=1) public void validlogin() {
    dv.findElement(By.id("email")).sendKeys("username");
    dv.findElement(By.id("pass")).sendKeys("pass");
    dv.findElement(By.id("loginbutton")).click();
  } 

  @Test (priority=2) public void makecomment() {
   //JavascriptExecutor jse = (JavascriptExecutor)dv;  
   //jse.executeScript("window.scrollBy(0,2000)", ""); 
    dv.findElement(By.xpath("/html/body/div[1]/div[1]/div/div/div/div[1]/div/div/div[2]/ul/li[1]/a/span")).click();
    dv.findElement(By.className("_209g _2vxa")).sendKeys("Nice one");
    dv.findElement(By.className("_209g _2vxa")).sendKeys(Keys.ENTER);
  } 

  @BeforeTest public void beforeTest() { 
  dv.get(baseurl); 
  }

   @AfterTest public void afterTest() 
  { 
  } 
}

【问题讨论】:

  • 详细说明您的问题?
  • 我想使用 selenium webdriver 对 facebook 帖子发表评论,但我无法找到评论框,我尝试使用 xpath 和 class 进行定位,但无法做到这一点
  • 每次都会生成?209g_2vxa类名,所以页面刷新后不会得到相同的类。
  • 那么我如何访问评论框我也尝试过使用 xpath 但没有成功
  • 有什么方法可以在 selenium 中找到可编辑的 div

标签: java selenium


【解决方案1】:

我终于做到了!在 python 中检查这段代码。

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.firefox.options import Options

firefox_options = Options()
firefox_options.add_argument('--dns-prefetch-disable')
firefox_options.add_argument('--no-sandbox')
firefox_options.add_argument('--lang=en-US')
browser = webdriver.Firefox(executable_path='/home/coder/Documents/Projects/socialbot/geckodriver', firefox_options=firefox_options)


browser.get('https://www.facebook.com/')
signup_elem = browser.find_element_by_id('email')
signup_elem.send_keys('EMAILHERE')

login_elem = browser.find_element_by_id('pass')
login_elem.send_keys('PASSHERE')

ins = browser.find_elements_by_tag_name('input')
for x in ins:
    if x.get_attribute('value') == 'Log In':
        x.click() # here logged in
        break
#then key here move to mobile version as that doesn't support javascript
browser.get('https://m.facebook.com')
el = browser.find_element_by_name('query')
el.send_keys('antony white')
el.send_keys(Keys.ENTER)
sleep(3)

temp= ''
ak = browser.find_elements_by_tag_name('a')
for a in ak:
    if a.get_attribute('href').endswith('search'):
        a.click()
        temp = a.get_attribute('href')[:a.get_attribute('href').find("?")]
        break

# CLICK TIMELINE
browser.get(temp+'?v=timeline')
sleep(10)


# find last post (occurance of comment)
as_el = browser.find_elements_by_tag_name('a')
for a in as_el:
    print(a.text)
    if 'omment' in a.text.strip():
        a.click()
        break
sleep(10)


# do actual comment
ins = browser.find_element_by_id('composerInput')
ins.send_keys('Best cars !')
# submit input
ins = browser.find_elements_by_tag_name('input')
for x in ins:
    if 'omment' in x.get_attribute('value'):
        x.click()
        break

移至移动 facebook 版本救了我的命。最后。我试图用 facebook api 做到这一点。但是他们的 Api 真的很烂!我做到了,在他们的图形 api 上浪费了很多时间,那是一场灾难。而且我认为 facebook 想用他们的图形 api 杀死某人。

【讨论】:

  • 请编辑你的答案并删除你所有的诅咒。 可能表达您对该 API 的看法是公平的,但请记住:这是一个通用的 q/a 网站;并且您的内容将来可能会被很多人阅读。因此:请编辑!
【解决方案2】:

试试这个:

dv.findElement(By.xpath("//a[@class='UFILikeLink']")).click();
Thread.sleep(2000);
dv.findElement(By.xpath("//a[@class='comment_link']")).click();
dv.findElement(By.className("_54-z")).sendKeys("hgfghjkj");
Thread.sleep(2000);
dv.findElement(By.className("_54-z")).sendKeys(Keys.RETURN);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多