Синтаксический анализ HTML: щелчок элемента с помощью обработчика «onclick» не обновляет WebBrowser ReadyState - PullRequest
1 голос
/ 23 сентября 2011

Я ищу способ щелкнуть HTML-элемент на странице программным способом. Если страница открывается в браузере и нам нужно щелкнуть элемент <A>, то вместо щелчка мы можем получить свойство HREF и перейти к этому URL. Преимущество этого подхода состоит в том, что Document :: ReadyState возвращает правильный статус, используя который мы можем дождаться полной загрузки страницы.

Проблема возникает, когда элемент, по которому нужно щелкнуть, имеет обработчик onclick . Щелчок по нему не дает никакого статуса в свойстве ReadyState или событии DocumentCompleted. В этом случае, как ждать полной загрузки документа.

1 Ответ

0 голосов
/ 10 февраля 2012

Ожидание до загрузки документа - сложная проблема, но вы хотите постоянно проверять ReadyState и Busy (не забывайте об этом). Кроме того, вы можете получить href элемента A, не проблема, но скажите мне, что происходит, когда вы нажимаете на A, который не вызывает DocComplete или ReadyState, можете ли вы дать нам externalHTML этого? почему не так? Это должна быть ссылка, которая выполняет только функцию JavaScript? Если он следует по ссылке, единственный способ не вернуть событие DocComplete - это вернуть событие NavigateError. Дайте нам знать.

Кроме того, если на странице, которую вы ожидаете, есть фреймы, вам нужно получить ссылку на них и проверить их .busy и .readystate, а если фреймы вложенные, то вложенные фреймы .readystate и .busy как ну, так что вам нужно написать функцию, которая рекурсивно получает эти ссылки.

Теперь, как правило, количество фреймов, первое запущенное событие navigatecomplete всегда является верхним документом, а последнее запущенное событие doccomplete - всегда и для верхнего (родительского) документа.

Таким образом, вы должны проверить, является ли первый вызов и pDisp Is WebBrowser1.object (буквально это то, что вы набираете в yoru if Statement), тогда вы знаете, что это navcomplete для документа верхнего уровня, затем вы ждете того же объекта в Документ завершен, поэтому сохраните pDisp в глобальной переменной и дождитесь, пока документ не будет завершен и pDisp документа Doc Complete будет равен глобальному pDisp, который вы сохранили во время первого события NavComplete (например, pDisp, который вы сохранили глобально). в первом событии NavComplete, которое сработало). Поэтому, как только вы узнаете, что pDisp был возвращен в завершенном документе, вы знаете, что весь документ завершен.

Это улучшит ваш метод currect, однако, чтобы сделать его более надежным, вы должны также выполнить проверку кадров, поскольку, даже если вы выполнили все вышеперечисленное, это более чем на 90% хорошо, но не на 100% надежно. , нужно сделать больше для этого.

Дайте мне знать ваши мысли и разъяснения по моему вопросу.

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