Fix add caption
All checks were successful
Push image to registry / build-image (push) Successful in 8m4s

This commit is contained in:
2025-06-07 15:25:33 +02:00
parent 33b9c7ce5f
commit b877912d05
2 changed files with 50 additions and 16 deletions

View File

@ -287,8 +287,29 @@ abstract class BrowserJob implements ShouldQueue
}
}
public function typeText(Browser $browser, string $text, string $querySelector): void
/**
* Parse a string for use in JavaScript.
*
* @param string $string The string to parse.
* @return string The parsed string.
*/
private function parseJavaScriptString(string $string): string
{
return str_replace("'", "\\'", $string);
}
/**
* Type text into an input field using JavaScript.
*
* @param Browser $browser
* @param string $text The text to type.
* @param string $querySelector The CSS selector for the input field.
*/
public function setInputValue(Browser $browser, string $text, string $querySelector): void
{
$text = $this->parseJavaScriptString($text);
$querySelector = $this->parseJavaScriptString($querySelector);
$browser->script("
let element = document.querySelector('{$querySelector}');
if (element) {
@ -300,4 +321,31 @@ abstract class BrowserJob implements ShouldQueue
}
");
}
/**
* Paste text into an element using JavaScript.
* Can be useful for non input elements that need to get text. For example works
* with `contenteditable` elements.
*
* @param Browser $browser
* @param string $text The text to paste.
* @param string $querySelector The CSS selector for the input field.
*/
public function pasteText(Browser $browser, string $text, string $querySelector): void
{
$text = $this->parseJavaScriptString($text);
$querySelector = $this->parseJavaScriptString($querySelector);
$browser->script("
var el = document.querySelector('{$querySelector}'), text = \"{$text}\";
el.focus();
const dataTransfer = new DataTransfer();
dataTransfer.setData('text', text);
const event = new ClipboardEvent('paste', {
clipboardData: dataTransfer,
bubbles: true
});
el.dispatchEvent(event)
");
}
}

View File

@ -332,21 +332,7 @@ class InstagramRepostJob extends BrowserJob implements ShouldBeUniqueUntilProces
// Add a caption
$captionText = $this->descriptionPipeline->process($videoInfo->getDescription());
$captionText = str_replace('"', '\"', $captionText);
$browser->keys('div[contenteditable]', $captionText); // Type the caption in the contenteditable div
// $browser->script("
// var el = document.querySelector('div[contenteditable]'), text = \"{$captionText}\";
// const dataTransfer = new DataTransfer();
// dataTransfer.setData('text', text);
// const event = new ClipboardEvent('paste', {
// clipboardData: dataTransfer,
// bubbles: true
// });
// document.querySelector('div[contenteditable]').dispatchEvent(event)
// ");
//$this->typeText($browser, $captionText, 'div[contenteditable]');
//$captionInput = $browser->driver->findElement(WebDriverBy::xpath('//div[@contenteditable]'));
//$captionInput->sendKeys($this->descriptionPipeline->process($videoInfo->getDescription()));
$this->pasteText($browser, $captionText, 'div[contenteditable]');
sleep(2); // Wait for the caption to be added