2013-04-03 4 views
1

Я хотел получить доступ к результатам перевода на следующий адресКак получить конкретный фрейм в веб-страницы и получить его содержание

http://translate.google.com/translate?hl=en&sl=en&tl=ar&u=http%3A%2F%2Fwww.saltycrane.com%2Fblog%2F2008%2F10%2Fhow-escape-percent-encode-url-python%2F

перевод отображается в нижнем фрейме содержимого из двух кадров. Я заинтересован в получении только нижний фрейм контента, чтобы получить переводы

селеном для питона позволяет нам получать содержимое страницы с помощью веб-автоматизации:

browser.get('http://translate.google.com/#en/ar/'+hurl) 

Требуемый кадр является IFrame:

<div id="contentframe" style="top:160px"><iframe src="/translate_p?hl=en&am... name=c frameborder="0" style="height:100%;width:100%;position:absolute;top:0px;bottom:0px;"></div></iframe> 

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

пришел знать, что PyQuery также позволяет просматривать содержимое с помощью Jquery формализма

Update:

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

frame = browser.find_element_by_tag_name('iframe') 
browser.switch_to_frame(frame) 
# get page source 
browser.page_source 

, но это не работает в приведенном выше примере. Он возвращает пустую страницу.

ответ

1

Здесь вы можете использовать driver.switchTo.frame(1);, цифра 1 внутри рамки() - это индекс кадров, присутствующих на веб-странице. так как вам необходимо переключиться на второй кадр, и индекс начинается с 0, вы должны использовать driver.switchTo.frame(1);

Но приведенный выше код находится на Java. В Python вы можете использовать нижнюю строку.

driver.switch_to_frame(1); 

UPDATE

driver.get("http://translate.google.com/translate?hl=en&sl=en&tl=ar&u=http://www.saltycrane.com/blog/2008/10/how-escape-percent-encode-url-python/"); 
driver.switchTo().frame(0); 
System.out.println(driver.findElement(By.xpath("/html/body/div/div/div[3]/h1/span/a")).getText()); 

Выход: SaltyCrane ???????

Я только что попытался напечатать название SaltCrane, которое присутствует внутри iframe. Это сработало для меня, кроме как? символы после SaltCrane. Поскольку это был арабский, он не смог декодировать то же самое.

Приведенный выше код находится на Java. Та же логика должна также работать в Python.

+0

его отображение: NoSuchFrameException: Сообщение: u'Найти, чтобы найти фрейм: 1 '; Stacktrace: метод FirefoxDriver.prototype.switchToFrame забросил ошибку в файле: /// c: /users/.../extensions/[email protected]/components/driver_component.js > – 2013-04-03 18:41:22

+0

Попробуйте дать 'driver.switch_to_frame (0); это единственный кадр, присутствующий на веб-странице. Мне удалось переключиться на фрейм и щелкнуть ссылку заголовка SaltyCrane. – Hemanth

+0

Вы получили переведенную страницу? – 2013-04-04 13:27:56

1

Selenium предоставляет метод, в котором вы можете это сделать.

frame = browser.find_element_by_tag_name('iframe') 
browser.switch_to_frame(frame) 
# get page source 
browser.page_source 
+0

Как получить конкретный источник iframe с именем = "c", как показано в вопросе? – 2013-04-03 18:42:15