Не уверен, как бороться с JavaScript и механизировать в этом конкретном случае - PullRequest
0 голосов
/ 13 января 2012

Я собираюсь получить доступ к нескольким учетным записям на KDP Амазонки - http://kdp.amazon.com/

Моя задача - войти в каждую учетную запись и проверить ее доход. Механизация отлично подходит для входа в систему и работы с файлами cookie и т. Д., Но страница, на которой отображается доход от аккаунта, использует JavaScript для динамического заполнения страницы.

Я немного покопался и обнаружил, что javascripts отправляет следующий запрос:

https://kdp.amazon.com/self-publishing/reports/transactionSummary?_=1326419839161&marketplaceID=ATVPDKIKX0DER

Наряду с cookie, который содержит идентификатор сеанса, токен и некоторые случайные вещи. Каждый раз, когда я нажимаю ссылку для отображения результатов, числовая часть приведенного выше URL-адреса GET отличается, даже если это одна и та же ссылка.

В ответ на запрос браузер получает это (обрезает его, чтобы он не занимал всю страницу):

 {"iTotalDisplayRecords":13,"iTotalRecords":13,"aaData":[["12/03/2011","<span
 title=\"Booktitle\">Hold That ...<\/span>","<span
 title=\"Author\">Amy  

 ....

 <\/span>","B004PGMHEM","1","1","0","70%","4.47","0.06","4.47","0.01","0.00",""],["","","","","","","","","","","","","<div
class='grandtotal'>Total: $ 39.53<\/div>","Junk"]]}

Я думаю, что могу использовать контейнер cookie механизации для извлечения файлов cookie, которые являются частью этого запроса, но как мне выяснить, что это за число и как оно генерируется? Яваскрипты в исходном коде страницы кажутся загадочными в лучшие дни. Вот один из них:

http://kdp.amazon.com/DTPUIFramework/js/all-signin-thin.js

Есть ли способ реально отследить, какие javascript-скрипты запускаются «за сценой», если можно так выразиться, после того, как я нажму на что-нибудь на странице, чтобы я мог эмулировать этот запрос в сочетании с механизацией?

Danke ..

PS: я не могу (или, скорее, я не хочу) использовать watir для этой задачи, потому что в теории я мог бы обрабатывать не только несколько учетных записей, так что это должно быть довольно быстро.

Ответы [ 2 ]

1 голос
/ 14 января 2012

Это просто временная метка, и она используется только для очистки кэша.Попробуйте это:

Time.now.to_i.to_s
0 голосов
/ 13 января 2012

Mechanize не запускает JavaScript, встроенный в страницу.Он только извлекает HTML.

Если страница содержит JavaScript, Mechanize может видеть его, и вы можете использовать Nokogiri, который Mechanize использует для внутренних целей, для извлечения содержимого тегов <script>.Но все, что будет загружено в результате выполнения JavaScript в браузере, не будет работать в Mechanize.Watir является решением для этого, потому что он управляет самим браузером, который будет интерпретировать и запускать JavaScript на странице.

Вы можете просматривать страницы в браузере и просматривать исходный код, чтобы получить представлениечто работает с помощью FireBug.Из этой информации вы можете получить представление о том, что делает JavaScript, а затем использовать Mechanize и Nokogiri для извлечения необходимой информации со страницы, которая позволяет создавать ваши следующие URL-адреса, но это может быть большой работой.

То, что вы спрашиваете, похоже на многие другие вопросы, касающиеся Mechanize и JavaScript.Я бы порекомендовал вам взглянуть на эти ссылки SO, чтобы получить альтернативные идеи:

Или Поиск переполнения стека для вопросов о Ruby, JavaScript и Mechanize.

...