2015-07-05 1 views
-1

Есть ли какой-либо возможный способ индексирования/списка и сравнения значений <img src=""> с использованием веб-браузера watir или selenium ?.Watir или Selenium webdriver - Найти для IMG SRC duplicated

Update # 1

Я успешно удался прогрессировать по общему сценарию для нахождения права <div>, содержащих фотографии

require 'watir-webdriver' 
require 'selenium-webdriver' 
b = Watir::Browser.new :firefox 

$i = 1 

(1..1000).each do |i| 
    b.goto 'http:example.com' 
    b.div(:id, 'pic_container').wait_until_present 
    puts 'div present' 

begin 
    if 

    else 

    end 

end 
b.close 

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


Update # 2

Спасибо как JustinKo и Carldmitch за их ответы. Я пошел на это сейчас:

require 'watir-webdriver' 
require 'selenium-webdriver' 

b = Watir::Browser.new :firefox 
b.goto 'https://trafficmonsoon.com' 

begin 
    Watir::Wait.until { b.url == "http://example.com" } 
    b.a(:href, "http://example.com/img").wait_until_present 
    b.a(:href, "http://example.com/img").click 
    Watir::Wait.until { b.url == "http://example.com/img" } 
    b.driver.manage.timeouts.implicit_wait = 10 
    b.a(:class, "btn").click 
end 

$i = 1 

(1..1000).each do |i| 
    b.driver.manage.timeouts.implicit_wait = 30 
    pics_set = b.div(:id, 'pics_container').images 
    pics_array = [] 
    pics_set.each_with_index do |image| 
    pics_array.push(image.current_src) 
    end 
    puts pics_array.find_all {|e| pics_array.rindex(e) != pics_array.index(e) }.uniq 

end 
b.close 

Единственная проблема здесь, является то, что он не показывая, какая картинка дублируется, а, это только показывает все img src без одного дублируется. Любой намек на это ?.

Заранее спасибо.


Update # 3

Я получил это работает, он печатает дублированный img src, но не может использовать выходные данные, чтобы сделать некоторые взаимодействия веб-браузера (щелчки & тащит)


Update # 4

Я успешно удалось взаимодействовать с данными, единственное, что я хочу знать, есть ли способ ПИК один или Аноф er duplicized? ?, так как оба ahve одинаково img src, нельзя нажать или перетащить из этого атрибута.

Вот код, который я получил сейчас

require 'sub' 
require 'watir-webdriver' 
require 'selenium-webdriver' 

b = Watir::Browser.new :firefox 

b.goto 'https://example' 

begin 
    Watir::Wait.until { b.url == "http://example.com/img" } 
    b.a(:href, "http://example.com/imgs").wait_until_present 
    b.a(:href, "http://example.com/imgs").click 
    Watir::Wait.until { b.url == "http://example.com/imgs" } 
    b.driver.manage.timeouts.implicit_wait = 10 
    b.a(:class, "btn btn-xs btn-danger").click 
end 

b.driver.manage.timeouts.implicit_wait = 30 
pics_set = b.div(:id, 'site_loader').images 
pics_array = [] 
pics_set.each_with_index do |image| 
    pics_array.push(image.current_src) 
end 
duplicated = pics_array.find_all {|e| pics_array.rindex(e) != pics_array.index(e) }.uniq 
duplicated[0].sub!("http://example.com 
b.img(:src, duplicated).click", ".") 

Update # 5

Вот пример div я Diggin' в

<div id="pic_container"> 
    <img src="./images/test/3.png" style="cursor:pointer;width:64px" onclick="checkClick ("7hva9f")"> 
    <img src="./images/test/5.png" style="cursor:pointer;width:59px" onclick="checkClick ("xt0nnc")"> 
    <img src="./images/test/5.png" style="cursor:pointer;width:67px" onclick="checkClick ("1tyz9b")"> 
    <img src="./images/test/1.png" style="cursor:pointer;width:67px" onclick="checkClick ("300yp7")"> 
    <img src="./images/test/7.png" style="cursor:pointer;width:67px" onclick="checkClick ("pzxgyh")"> 
</div> 
+0

Трудно понять, что именно вы ищете. Можете ли вы привести пример - то есть HTML, что вы пытаетесь сделать и что вы пробовали? –

+0

Конечно, я хотел бы осмотреть веб-сайты, которые ищут дублированные изображения по его исходному адресу. Я думаю, что лучший способ сделать это - проверить и массировать/перечислить все дублированные изображения по их исходному адресу, а затем сравнить их, чтобы увидеть, есть ли дубликат. Прямо сейчас я работаю над сценарием watir/selenium, мне удалось запустить скрипт для поиска отдельных элементов, но не для массива. – lynspyre

ответ

0

Вы можете получить все изображения в браузере или элементе, извлекая ImageCollection. Для получения коллекции вы можете использовать метод imgs или images.

Все изображения в «pic_container» DIV может быть получен с помощью:

b.div(:id, 'pic_container').images 

ImageCollection перечисляемость, что означает, что вы можете получить массив ЦСИ атрибутов с помощью:

b.div(:id, 'pic_container').images.map(&:src) 
#=> ['src1', 'src2', 'etc'] 

Или, если вам нужно сделать больше пользовательской логики для каждого изображения, вы можете выполнять итерацию по каждому из них с помощью each или each_with_index (если вам также нужен индекс). Например:

b.div(:id, 'pic_container').images.each_with_index do |image, i| 
    puts image.src 
    puts i 
end 
0

Когда я занимаюсь другими вещами, кроме управления браузером, мне нравится просто использовать Ruby.

require 'watir-webdriver' 

browser = Watir::Browser.new :chrome 
browser.goto 'http:example.com' 

#collects all images on page 
image_collection = browser.images 

# creates array of the 'src' urls 
image_array = [] 
image_collection.each do |image| 
    image_array.push(image.current_src) 
end 

# outputs urls if any duplicates are found in the array 
puts image_array.find_all {|e| image_array.rindex(e) != image_array.index(e) }.uniq 

browser.close 
Смежные вопросы