rodrigozc

rodrigozc

Hello everyone,

I’m trying to automating navigation using Hound, but I’m having some troubles with select/option elements and how to interact with them.

For instance, I tried in different ways to select an option from the site “https://www.imovelweb.com.br/.”

I tried the solution below but didn’t work.

https://github.com/HashNuke/hound/issues/72#issuecomment-178071219

I’m using the selenium driver with the chrome browser.

$ brew install selenium-server-standalone
$ selenium-server -port 4444
use Mix.Config

config :hound,
  driver: "selenium",
  browser: "chrome"

I tried to select in the following ways:

def search() do
    Hound.start_session()

    navigate_to(@url)

    find_element(:css, "#operationType option[value='1']")
    |> click

    #take_screenshot()

  rescue
    e ->
      IO.inspect(e)
      :notfound
  after
    Hound.end_session
  end

Error

%RuntimeError{
  message: "element not interactable: Element is not currently visible and may not be manipulated\n  (Session info: chrome=79.0.3945.88)\nBuild info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'\nSystem info: host: 'Rodrigos-MacBook-Pro.local', ip: '2804:14c:4a:9f9d:1591:2820:1fe7:d763', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.15.2', java.version: '1.8.0_131'\nDriver info: driver.version: unknown"
}
def search() do
    Hound.start_session()

    navigate_to(@url)

    find_element(:css, "#operationType")
    |> find_within_element(:css, "option[value='1']")
    |> click

    #take_screenshot()

  rescue
    e ->
      IO.inspect(e)
      :notfound
  after
    Hound.end_session
  end

Error

%RuntimeError{
  message: "element not interactable: Element is not currently visible and may not be manipulated\n  (Session info: chrome=79.0.3945.88)\nBuild info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'\nSystem info: host: 'Rodrigos-MacBook-Pro.local', ip: '2804:14c:4a:9f9d:1591:2820:1fe7:d763', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.15.2', java.version: '1.8.0_131'\nDriver info: driver.version: unknown"
}

I was wondering if I have to click on the select element before to show the options and then click on the chosen option, but when I tried to click on the select element I got another error.

def search() do
    Hound.start_session()

    navigate_to(@url)

    find_element(:css, "#operationType")
    |> click

    #take_screenshot()

  rescue
    e ->
      IO.inspect(e)
      :notfound
  after
    Hound.end_session
  end

Error

%RuntimeError{
  message: "element not interactable\n  (Session info: chrome=79.0.3945.88)\nBuild info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'\nSystem info: host: 'Rodrigos-MacBook-Pro.local', ip: '2804:14c:4a:9f9d:1591:2820:1fe7:d763', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.15.2', java.version: '1.8.0_131'\nDriver info: driver.version: unknown"
}

Thanks!

Showing Posts 1 to 9

wolfiton

wolfiton

I don’t see this in your code

use Hound.Helpers
hound_session()

This is what I am using to test by following this book https://shankardevy.com/phoenix-inside-out-mpf/ . But it uses phantomjs

Also if you use Linux install phantomjs like this Problem with acceptance test in hound not starting server on port 4001

Update found this in my tests, it might be similar with what you need:

find_element(:css, "#registration_residence_area option[value='Area 1']")
    |> click
rodrigozc

rodrigozc OP

I’m using hound to get some informations from a website, not for test purposes, sorry about my tag test, it’s not the case.

My module contains use Hound.Helpers, I think that hound_session() is used just in test cases to setup the session in the setup method.

I tried using PhantomJS too, in this case, I did not even make it select the option. When I inspected the HTML, the option values were blank. It’s weird, I know, so I changed the code to use the Selenium.

I’m starting and finishing the session in the method.

Below is the whole module.

defmodule PropertyCrawler.Imovelweb do
  use Hound.Helpers

  @url "https://www.imovelweb.com.br/"

  def search() do
    Hound.start_session()

    navigate_to(@url)

    find_element(:css, "#operationType option[value='1']")
    |> click

    #take_screenshot()

  rescue
    e ->
      IO.inspect(e)
      :notfound
  after
    Hound.end_session
  end

end
wolfiton

wolfiton

To use phantomjs you need to run this phantomjs --wd in a terminal window and at the same time in a new window your mix phx.server

That should work. If it doesn’t I really don’t know what is happening.

rodrigozc

rodrigozc OP

The idea is to use navigation with Hound to filter some data filling the form and after that to use Floki to parse data.

rodrigozc

rodrigozc OP

With PhantonJS I cannot find the element, executing the same find_element I got the error below.

%Hound.NoSuchElementError{
  parent: nil,
  selector: "#operationType option[value='1']",
  strategy: :css
}

Inspecting the #operationType element with PhantonJS I saw that all options had blank values.

<select name="" id="operationType">
  <option value="" selected="">Comprar</option>
  <option value="">Alugar</option>
  <option value="">Imóvel Novo</option>
  <option value="">Comercial</option>
  <option value="">Temporada</option>
</select>
wolfiton

wolfiton

This is strange have you tried to extract just an h1 tag to see if hound is working?

rodrigozc

rodrigozc OP

Yes, I can get h1 tag.

...
  find_element(:css, "h1")
  |> outer_html
...

Result:

iex(1)> PropertyCrawler.Imovelweb.search
"<h1>Você muda, <b>sua vida muda</b></h1>"
wolfiton

wolfiton

OK then how about writing your select like this:

<%= select f, :category_id, Enum.map(@categories, &{&1.name, &1.id}), prompt: "Choose a category" %>

If this doesn’t work either then try to create a minimal example only with a slect and test hound on that to see if that works.
If it does then you most certenly have a problem in your actual code or a bug.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
itzmidinesh
Hi all, I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
pragdave
How do I tell Hologram not to escape HTML when substituting into templates? {Textile.render(@product.long_description)} escapes the HTM...
New
rlipscombe
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New
rlipscombe
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used? I’ve got two Github accoun...
New
adr
Hello all. I have a question as to best practices for code organization when implementing a liveview with a lot of responsibilities. Sup...
New

Other Trending Topics Top

dominicletz
Hey there, I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first. ...
New
raa-ziq
Hi everyone :waving_hand: I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
OndrejValenta
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly) AI dream has many faces, but general...
New
kip
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews