質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

解決済

seleniumでjavascriptを実行するもunterminated regular e xpression literal

keraker
keraker

総合スコア41

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

1回答

0評価

0クリップ

466閲覧

投稿2022/01/21 11:33

編集2022/01/21 22:05

以下のサイトのjavascriptをdriver.execute_scriptで実行しようとしましたがこのエラーが発生しました。
https://qiita.com/kulikala/items/39536872e0f1c492b358

SyntaxError: unterminated regular expression literal (Selenium::WebDriver::Error::JavascriptError)

確認してみましたがjavascriptとしてはエラーはありませんでした。
また、alertなどは問題ありませんでした。

もとがブックマークレットなのでjavascriptを変換したときに何か失われてしまう部分でもあるのでしょうか。

よろしくお願いします。

実行した文は長いですが以下です。

ruby

scr=<<-eos ((document, Promise, setTimeout, html, on, size, text) => { const $ = (query, doc = document) => doc.querySelector(query) const $$ = (query, doc = document) => doc.querySelectorAll(query) const appendChild = (child, parent = document.body) => parent.appendChild(child) const createElement = tag => document.createElement(tag) const cleanup = () => { if (iframe !== undefined) { iframe.remove() } } const concat = (base, append, more = []) => base.concat(append).concat(more) const convert = row => `"${row.map(s => replaceArr( s && typeof s !== 'string' && text in s ? s[text] : s, [/"/g, /\n/g], ['""', ''] )).join('","')}"` const decode = href => { let out = href try { out = decodeURI(href) } catch (e) {} return out } const download = () => { const blob = new Blob([ new Uint8Array([0xEF, 0xBB, 0xBF]), joinLines(concat([ convert([ 'href', 'decoded', 'title', 'breadcrumb', 'date', 'description' ]) ], ret)) ], { type: 'text/csv' }) const a = createElement('a') const url = URL.createObjectURL(blob) a.download = document.title + '.csv' a.href = url a.click() setTimeout(() => URL.revokeObjectURL(url), 1000) } const filter = array => array.filter(item => !!item) const joinLines = array => array.join('\n') const last = (() => { const g = $$('#rso .g') if (g[size] === 0) { return $('#rso') } else { return g[g[size] - 1].parentNode } })() const main = async () => { const found = scan() if (found[size] === 0) { alert('No item found.\nIf you think this script works incorrectly contact the creator.\nThx in advance.') return } const message = [ `Found: ${found[size]}`, `Total: ${found[size] + ret[size]}` ] ret = concat(ret, found) await scroll() const pnnext = $('#pnnext', doc) if (pnnext === null) { alert(joinLines(message)) cleanup() return download() } message.unshift('Continue next page?') if (confirm(joinLines(message))) { await next(pnnext.href) main() } else { cleanup() download() } } const mapElements = (query, callback) => Array.from($$(query, doc)).map(callback) const next = href => { if (iframe === undefined) { iframe = createElement('iframe') setStyle(iframe, { display: 'none' }) appendChild(iframe) } const progress = createElement('div') setStyle(progress, { background: 'black', color: 'white', left: 0, padding: '8px 20px', position: 'fixed', top: 0, zIndex: 1000 }) progress[text] = 'Loading...' appendChild(progress) return new Promise(resolve => { iframe[on]('load', () => { doc = iframe.contentWindow.document progress.remove() const wrapper = createElement('div') wrapper[html] = $('#rso', doc)[html] appendChild(wrapper, last) if (doc !== document) { $('#xjs')[html] = $('#xjs', doc)[html] } resolve() }, { once: true }) iframe.src = href }) } const replace = (string, from, to = '') => (string || '').replace(from, to) const replaceArr = (string, from, to) => from.reduce((prev, pattern, index) => replace(prev, pattern, to[index]), string) const scan = () => filter(concat( // All tab mapElements('#rso div.g > div', item => { const a = $('div.yuRUbf a', item) if (!a || item === snippet) { return false } const href = a.href let date let desc if ($('#media_result_group', item)) { desc = $('[role="heading"] span.hgKElc', item) } else if ($('div.IsZvec g-img', item)) { date = $('div.IsZvec div.fG8Fp', item).firstChild.wholeText desc = $('div.IsZvec span.aCOpRe', item) } else { date = $('div.IsZvec span.wuQ4Ob', item) desc = $('div.IsZvec div.VwiC3b', item) } return convert([ href, decode(href), $('div.yuRUbf h3', item), $('div.yuRUbf cite', item), typeof date === 'string' ? date : date && date.children[size] === 0 ? replace(date[text], / . ?$/) : '', desc ? ( date ? replace(desc[text], date[text]).trimLeft() : desc[text] ) : '' ]) }), // News tab mapElements('#rso g-card > div > div > a.WlydOe', item => { const href = item.href return convert([ href, decode(href), $('[role=heading]', item), $('div.CEMjEf span', item), $('p.S1FAPd span', item), $('div.GI74Re', item) ]) }), // Images tab mapElements('#islrg div.isv-r', item => { const link = $('a[rel="noopener"]', item) if (link === null) { console.log(item) return false } const href = link.href const src = $('img', item).src return convert([ href, decode(href), link.title, $('div.fxgdke', link), $('span.gRqDMe', item), src.startsWith('data:') ? '' : src ]) }) )) const scroll = () => { return new Promise(resolve => { ($('#islmp') || document.body).scrollIntoView({ behavior: 'smooth', block: 'end' }) const listener = () => { clearTimeout(timer) timer = setTimeout(() => { document.removeEventListener('scroll', listener) resolve() }, 500) } let timer document[on]('scroll', listener, { passive: true }) listener() }) } const setStyle = (target, style) => { for (let key in style) { target.style[key] = style[key] } } const snippet = $('#rso div.g > div div.g > div') let doc = document let iframe let ret = [] main() })(document, Promise, setTimeout, 'innerHTML', 'addEventListener', 'length', 'innerText') eos driver.execute_script(scr)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

otn

2022/01/21 12:09

書き方が間違っているというエラーなので、どう書いたのかを示してもらわないと、回答不能です。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。