Как вырезать определенный текст из PDF с помощью Selenium с VBA - PullRequest
0 голосов
/ 18 июня 2019

Я делаю проект автоматизации, где он начинается с открытия браузера, посещения URL-адреса, входа в него, нажатия нескольких ссылок и, наконец, перехода по ссылке, которая открывает файл PDF в самом браузере.Теперь я хочу получить строку из PDF в Excel (как строку).

Я использовал приведенный ниже код, предоставленный автором из GitHub.С помощью кода я могу удалить только первую строку PDF.PDF-файл, который я использую, является динамическим, и иногда нужная мне информация находится на 5-й строке, а иногда - на 25-й строке и т. Д. ...

Надеюсь, я это объяснил, извините за ошибки

Private Sub Handle_PDF_Chrome()
Dim driver As New ChromeDriver
driver.Get "http://static.mozilla.com/moco/en-US/pdf/mozilla_privacypolicy.pdf"

' Return the first line using the pugin API (asynchronous).
Const JS_READ_PDF_FIRST_LINE_CHROME As String = _
"addEventListener('message',function(e){" & _
" if(e.data.type=='getSelectedTextReply'){" & _
"  var txt=e.data.selectedText;" & _
"  callback(txt && txt.match(/^.+$/m)[0]);" & _
" }" & _
"});" & _
"plugin.postMessage({type:'initialize'},'*');" & _
"plugin.postMessage({type:'selectAll'},'*');" & _
"plugin.postMessage({type:'getSelectedText'},'*');"

' Assert the first line
Dim firstline
firstline = driver.ExecuteAsyncScript(JS_READ_PDF_FIRST_LINE_CHROME)
Assert.Equals "Websites Privacy Policy", firstline

driver.Quit
End Sub

1 Ответ

2 голосов
/ 18 июня 2019

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

регулярное выражение становится

[^\r\n]+

для получения всех строк (игнорируя пустые строки),Затем вы индексируете 4, чтобы получить строку 5.

Объяснение регулярного выражения:

enter image description here

addEventListener('message',function(e){if(e.data.type=='getSelectedTextReply'){var txt=e.data.selectedText;
callback(txt && txt.match(/[^\r\n]+/g)[4]);}});
plugin.postMessage({type:'initialize'},'*');
plugin.postMessage({type:'selectAll'},'*');
plugin.postMessage({type:'getSelectedText'},'*');
...