Access the attribute of a div element in an array of div elements

in the answer to this question Access to the div element in the array of li elements and when I look here http://wiki.openqa.org/display/WTR/Collections+of+HTML+Elements

I don’t see or understand what I need to do

what I'm trying to do is make a table with my guilds player_name, player_id and player_lvl.

This is a page where there are members of the guild. guild page it is a sample html

<div class="guild_board"> <div class="item_box_guild" data-playerid="1256824509"> <a onclick="doCmd(81,{'player_id':'1256824509'})"><div class="tile_50"> <div class="avatar_container_50"> <div class="avatar_image" style="background-image:url(//assets.ageofchampions.com/avatar/09/45/82/56/12/avatar_1351896996145.png);"> </div> </div> <div class="over"> <img src="http://profile.ak.fbcdn.net/hprofile-ak-ash4/187582_1256824509_1172546357_q.jpg"> </div> <div class="lock"></div> </div> </a> <div class="content"> <div class="stat" style="width:225px;"> <a onclick="doCmd(81,{'player_id':'1256824509'})">~|SR|~ Kariselle</a> | Level 348 <hr> Battle Score: 23,951,169 

this code works to get the first member, and I could do (=> index (2)) to get the next member and so on. on momunt we have only 10 members, but it can become much larger. and if I don’t need it, I don’t want to write it for every participant.

 require 'rubygems' require 'watir-webdriver' require 'google_drive' b = Watir::Browser.new b.goto 'http://game.ageofchampions.com/aoc/?cmd%5B0%5D=112&guild_id=138668' b.text_field(:id => 'email').set 'email' b.text_field(:id => 'pass').set 'psswd' b.button(:name => 'login').click session = GoogleDrive.login('username', 'pass') ws=session.spreadsheet_by_key('spreadsheethe').worksheets[0] b.goto 'game.ageofchampions.com/aoc/?cmd%5B0%5D=112&guild_id=138668' #b.divs(:class => 'item_box_guild').each do |div| playerid_1 = b.div(:class => 'item_box_guild').attribute_value(:'data-playerid') #playerid_1a = puts attribute_value(:'data-playerid') #end playername_1 = b.div(:class => 'item_box_guild').div(:class => 'stat').a.text #playerlvl_1 = b.div(:class => 'item_box_guild').div(:class => 'stat').text #layerlvl_1a = playerlvl_1\s+id="0"\s+value="(.+?)" # Gets content of A2 cell. p ws[2, 1] #==> "hoge" # Changes content of cells. # Changes are not sent to the server until you call ws.save(). ws[1, 1] = "PLAYER ID" ws[1, 2] = "CHAMPIONS NAME" ws[1, 3] = "LEVEL" ws[2, 1] = playerid_1 ws[2, 2] = playername_1 ws[2, 3] = "still working on lvl" ws[3, 1] = "does this" ws[3, 2] = "still" ws[3, 3] = "work" ws.save() # Dumps all cells. for row in 1..ws.num_rows for col in 1..ws.num_cols p ws[row, col] end end # Yet another way to do so. #p ws.rows #==> [["fuga", ""], ["foo", "bar]] # Reloads the worksheet to get changes by other clients. ws.reload() 
+4
source share
1 answer

Do you want to get a collection of players when you do:

 b.divs(:class => 'item_box_guild') 

When you iterate over each of them:

 b.divs(:class => 'item_box_guild').each do |div| 

The div variable will be the div in the collection. Inside the iteration, you want to refer to the div , not b.div(:class => 'item_box_guild') to get each player.

Try to do this:

 b.divs(:class => 'item_box_guild').each do |plaher_div| playerid = player_div.attribute_value(:'data-playerid') puts playerid #=> This will be 'player1' during the first iteration, 'player2' during the second, etc. end 
+2
source

Source: https://habr.com/ru/post/1443966/


All Articles