Почему SeleniumDriver / Java нужно прокручивать вниз, чтобы я мог публиковать на Facebook? - PullRequest
0 голосов
/ 22 октября 2019

Я пытался заставить Selenium Driver публиковать пост в Facebook, как правило, с помощью драйвера Firefox, но не смог / не смог нормально это сделать: по какой-то причине я вынужден сделать прокрутку браузера вниз, прежде чем нажать кнопкув противном случае я получаю ошибку.

Вот мой код:

Код-листинг 1: Main.java

package main;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class Main {

    public static void main(String args[]) {

        System.setProperty("webdriver.gecko.driver", "D:\\PortableApps\\Webdrivers\\geckodriver.exe");

        FirefoxOptions options = new FirefoxOptions()
                  .addPreference("browser.startup.page", 1)
                  .addPreference("permissions.default.desktop-notification", 1)
                  .addPreference("intl.accept_languages", "en-US")
                  .addPreference("browser.startup.homepage", "https://www.google.co.uk");

        WebDriver driver = new FirefoxDriver(options);
        driver.get("https://www.facebook.com");
        driver.findElement(By.className("inputtext")).sendKeys("ghostbrain@hotmail.fr");
        driver.findElements(By.className("inputtext")).get(1).sendKeys("Xrt4LV512");
        driver.findElement(By.className("inputtext")).submit();


        WebDriverWait wait = new WebDriverWait(driver, 60);
        WebElement postBox = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("feedx_sprouts_container")));
        postBox.click();

        postBox = wait.until(ExpectedConditions.presenceOfNestedElementLocatedBy(By.id("feedx_sprouts_container"), By.className("notranslate")));
        postBox.sendKeys("Hello Post!");

        try {
            Thread.sleep(5000);//Necessary because of the way facebook works
        } catch (InterruptedException e) {}

        WebElement postButton = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#feedx_sprouts_container button[type=submit]")));
        postButton.click();

    }
}

если я запускаю этот код, я получаю сообщение об ошибке из Facebook, в котором говорится:

Ваш запрос не может быть обработан

Возникла проблема с этим запросом. Мы работаем над тем, чтобы исправить это как можно скорее.

visual representation of the facebook request couldn't be processed

, чтобы решить эту проблему, мне пришлось воспользоваться решением Selenium и Facebook Post Button: Как нажать кнопку публикации Facebook в Java, используя селен? . То есть мне пришлось заставить браузер прокручиваться вниз, используя следующий код после Thread.sleep () try / catch.

Листинг 2: Extra

((JavascriptExecutor)driver).executeScript("window.scrollBy(0,259)","");

Это работает, но это ненормально, и я боюсь, что попадаю на другую стену с Facebook позже, если я не знаю причины этой ошибки.

1 Ответ

1 голос
/ 22 октября 2019

Попробуйте приведенный ниже код, используйте Actions и измените локатор:

WebDriverWait wait = new WebDriverWait(driver, 60);
Actions act = new Actions(driver);

WebElement postBox = wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("xhpc_message")));
act.moveToElement(postBox).click().build().perform();

WebElement postBox2 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("._1mf._1mj")));
act.moveToElement(postBox2).click().sendKeys("Hello Post").build().perform();

WebElement postButton = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("#feedx_sprouts_container button[type=submit]")));
postButton.click();

После импорта:

import org.openqa.selenium.interactions.Actions;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...